pthread_cancel() in C with example (original) (raw)
Last Updated : 6 Sep, 2017
**prerequisite: Multithreading, pthread_self() in C with Example**pthread_cancel() = This function cancel a particular thread using thread id. This function send a cancellation request to the thread.Syntax : - int pthread_cancel(pthread_t thread); First Program : - Cancel self thread
C `
// C program to demonstrates cancellation of self thread // using thread id #include <stdio.h> #include <stdlib.h> #include <pthread.h>
void* calls(void* ptr) { printf("GeeksForGeeks");
// To exit the current thread
// pthread_self() return the particular thread id
pthread_cancel(pthread_self());
return NULL;}
int main() { // NULL when no attribute pthread_t thread;
// calls is a function name
pthread_create(&thread, NULL, calls, NULL);
// Waiting for when thread is completed
pthread_join(thread, NULL);
return 0;}
`
Output:
GeeksForGeeks
If you use Linux then compile this program gcc program_name.c -lpthread Second Program : - Cancel other thread
C `
// C program to demonstrates cancellation of another thread // using thread id #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h>
// To Count int counter = 0;
// for temporary thread which will be // store thread id of second thread pthread_t tmp_thread;
// thread_one call func void* func(void* p) { while (1) {
printf("thread number one\n");
sleep(1); // sleep 1 second
counter++;
// for exiting if counter = = 5
if (counter = = 2) {
// for cancel thread_two
pthread_cancel(tmp_thread);
// for exit from thread_one
pthread_exit(NULL);
}
}}
// thread_two call func2 void* func2(void* p) {
// store thread_two id to tmp_thread
tmp_thread = pthread_self();
while (1) {
printf("thread Number two");
sleep(1); // sleep 1 second
}}
// Driver code int main() {
// declare two thread
pthread_t thread_one, thread_two;
// create thread_one
pthread_create(&thread_one, NULL, func, NULL);
// create thread_two
pthread_create(&thread_two, NULL, func2, NULL);
// waiting for when thread_one is completed
pthread_join(thread_one, NULL);
// waiting for when thread_two is completed
pthread_join(thread_two, NULL); }
`
Output:
thread number one thread number two thread number one thread number two
If you use Linux then compile this program gcc program_name.c -lpthread