I use pthread_create(&thread1, &attrs, //... , //...);
and need if some condition occured need to kill this thread how to kill this ?
The pthread_exit() function terminates the calling thread, making its exit status available to any waiting threads. Normally, a thread terminates by returning from the start routine that was specified in the pthread_create() call which started it.
A thread automatically terminates when it returns from its entry-point routine. A thread can also explicitly terminate itself or terminate any other thread in the process, using a mechanism called cancelation.
The pthread_join() function shall suspend execution of the calling thread until the target thread terminates, unless the target thread has already terminated.
You can't only kill a thread of a process, if you use the command "kill -9 threadNo", you will kill the process.
First store the thread id
pthread_create(&thr, ...)
then later call
pthread_cancel(thr)
However, this not a recommended programming practice! It's better to use an inter-thread communication mechanism like semaphores or messages to communicate to the thread that it should stop execution.
Note that pthread_kill(...) does not actually terminate the receiving thread, but instead delivers a signal to it, and it depends on the signal and signal handlers what happens.
There are two approaches to this problem.
sigaction()
which sets a flag, and the thread periodically checks the flag to see whether it must terminate. When the thread must terminate, issue the signal to it using pthread_kill()
and wait for its termination with pthread_join()
. This approach requires pre-synchronization between the parent thread and the child thread, to guarantee that the child thread has already installed the signal handler before it is able to handle the termination signal;pthread_cancel()
and wait for its termination with pthread_join()
. This approach requires detailed usage of pthread_cleanup_push()
and pthread_cleanup_pop()
to avoid resource leakage. These last two calls might mess with the lexical scope of the code (since they may be macros yielding {
and }
tokens) and are very difficult to maintain properly.(Note that if you have already detached the thread using pthread_detach()
, you cannot join it again using pthread_join()
.)
Both approaches can be very tricky, but either might be specially useful in a given situation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With