pthread_cancel() in C with example

Last Updated : 13 Aug, 2026

The pthread_cancel() function is used to request the cancellation of a specific thread. It is provided by the POSIX Threads (pthread) library.

  • It takes the thread ID (pthread_t) as an argument and sends a cancellation request to that thread.
  • The target thread may handle the cancellation immediately or at a cancellation point, depending on its cancellation state and type.

Program: Cancel self thread  

C
#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

Syntax

int pthread_cancel(pthread_t thread);

Program: Cancel other thread  

C
#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

Comment