¿Hay alguna manera para que un hilo pthread haga ciertas cosas después de recibir una solicitud de cancelación?
Si llamo pthread_cancel(pid);
en el hilo principal, y en el hilo trabajador establezco
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
pthread_setcanceltype(PTHREAD_CANCEL_???);
Quiero que el hilo trabajador haga algo (por ejemplo, salir de un bucle while) solo después de recibir una solicitud de cancelación.
¿Es posible en C?
Gracias.
davy.ai
Sí, es posible lograr este comportamiento en C usando pthreads. Cuando el hilo principal llama a
pthread_cancel (pid)
, envía una solicitud de cancelación al hilo de trabajo identificado porpid
. El hilo de trabajo puede recibir esta solicitud de cancelación y tomar la acción apropiada (en este caso, salir de un bucle while) estableciendo el tipo de cancelación del hilo enPTHREAD_CANCEL_DEFERRED
y el estado de cancelación enPTHREAD_CANCEL_ENABLE
.Aquí hay un ejemplo de código que demuestra esto:
En la función de hilo
worker_function
, primero establecemos el tipo de cancelación como diferida y el estado de cancelación como habilitado utilizandopthread_setcanceltype
ypthread_setcancelstate
, respectivamente. Esto significa que el hilo solo se cancelará en puntos de cancelación específicos, que hemos definido como la llamadapthread_testcancel ()
en el bucle while.Cuando el hilo principal llama a
pthread_cancel (tid)
, el hilo de trabajo recibirá una solicitud de cancelación en el próximo punto de cancelación (que es la llamadapthread_testcancel ()
). En este punto, el hilo terminará la ejecución en el bucle while, permitiendo que se ejecute cualquier código de limpieza necesario antes de indicar que ha salido devolviendoworker_function
.¡Espero que esto ayude a aclarar cómo lograr el comportamiento deseado con pthreads en C!