Tutorialspoint.dev

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

 



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

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



This article is attributed to GeeksforGeeks.org

You Might Also Like

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter