When does one use pthread_cancell and not pthread_kill?
I would use neither of those two but that's just personal preference.
Of the two, pthread_cancel
is the safest for terminating a thread since the thread is only supposed to be affected when it has set its cancelability state to true using pthread_setcancelstate()
.
In other words, it shouldn't disappear while holding resources in a way that might cause deadlock. The pthread_kill()
call sends a signal to the specific thread, and this is a way to affect a thread asynchronously for reasons other than cancelling it.
Most of my threads tends to be in loops doing work anyway and periodically checking flags to see if they should exit. That's mostly because I was raised in a world when pthread_kill()
was dangerous and pthread_cancel()
didn't exist.
I subscribe to the "each thread should totally control its own resources, including its execution lifetime. I've always found that to be the best way to avoid deadlock. To that end, I simply use mutexes for communication between threads (I've rarely found a need for true asynchronous communication) and a flag variable for termination.