The
pthread_cancel() function requests that
thread be canceled. The target thread's cancelability state and type determines whether and when the target thread reacts to the cancellation request.
1.
The cancelability
state of a thread is determined by the
pthread_setcancelstate(3) function. The state can be either:
•
PTHREAD_CANCEL_ENABLE: the cancelability type determines when the actual cancellation occurs. This is the default.
•
PTHREAD_CANCEL_DISABLE: the request from pthread_cancel() remains queued until the cancellation is enabled by the thread.
2.
The cancellation
type of a thread is determined by the
pthread_setcanceltype(3) function. The type can be either:
•
PTHREAD_CANCEL_DEFERRED: the cancellation will be delayed until the thread calls a function that is a cancellation point. This is the default. The available cancellation points are listed in
pthread_setcanceltype(3).
•
PTHREAD_CANCEL_ASYNCHRONOUS: the thread can be canceled at any time.
When the tread reacts to the cancellation request, the following occur:
2.
When the last cancellation cleanup handler returns, the thread-specific data destructor functions will be called for the thread.
3.
When the last destructor function returns, the thread will be terminated; see
pthread_exit(3).
The cancellation processing in the target thread runs asynchronously with respect to the calling thread returning from
pthread_cancel().
A status of
PTHREAD_CANCELED is made available to any threads joining with the target. The symbolic constant
PTHREAD_CANCELED expands to a constant expression of type
(void *), whose value matches no pointer to an object in memory nor the value
NULL.