當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C語言 pthread_cancel()用法及代碼示例


先決條件:多線程帶有示例的C中的pthread_self()

pthread_cancel() =該函數使用線程ID取消特定線程。該函數向線程發送取消請求。

語法:-int pthread_cancel(pthread_t 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; 
}

輸出:

GeeksForGeeks

如果使用Linux,則編譯此程序gcc program_name.c -lpthread

第二程序:-取消其他線程

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

輸出:

thread number one
thread number two
thread number one 
thread number two

如果使用Linux,則編譯此程序gcc program_name.c -lpthread



相關用法


注:本文由純淨天空篩選整理自 pthread_cancel() in C with example。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。