pthread_cancel() in C with example

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

 



filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Output:

GeeksForGeeks

 

If you use Linux then compile this program gcc program_name.c -lpthread

Second Program : – Cancel other thread

 

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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); 
  
}

chevron_right


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

This article is contributed by Devanshu Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.