呼叫pthread cancel阻塞問題解決方法

2021-08-15 09:09:39 字數 757 閱讀 1495

兩個例子:

阻塞例子:

#include

#include

#include

#include

void *thread_fun(void *arg)  

return (void *)0;  

}  int main()  

非阻塞例子:

#include

#include

#include

#include

void *thread_fun(void *arg)  

return (void *)0;  

}  int main()  

將while迴圈中的注釋掉的三句,任何一句開啟,都會停止阻塞.

原因是: pthread_cancel向另一線程發終止訊號。系統並不會馬上關閉被取消執行緒,只有在被取消執行緒下次系統呼叫時,才會真正結束執行緒。如果執行緒裡面沒有執行系統呼叫,可以使用pthread_testcancel解決。

必須要有系統呼叫, 如果沒有系統呼叫,則呼叫pthread_testcancel函式.

pthread_testcancel()函式用來在當前執行緒建立乙個「可取消點」。如果當前執行緒是不能取消的,則這個函式無效。pthread_setcancelstate, pthread_setcanceltype, pthread_testcancel - set cancelability state這三個函式用來設定執行緒是否可以被其他執行緒呼叫pthread_cancel函式取消/終止。

執行緒取消 pthread cancel

基本概念 pthread cancel呼叫並不等待執行緒終止,它只提出請求。執行緒在取消請求 pthread cancel 發出後會繼續執行,直到到達某個取消點 cancellationpoint 取消點是執行緒檢查是否被取消並按照請求進行動作的乙個位置.與執行緒取消相關的pthread函式 int...

執行緒pthread cancel 函式

功能 呼叫執行緒終止同程序中,其他的執行緒,呼叫該方法後,被終止的執行緒並不一定立馬被終止,只有在下次系統呼叫或呼叫了pthread testcancel 方法後,才真正終止執行緒 原型 int pthread cancel pthread t pid include includevoid chi...

pthread cancel 使用方法1

include include define failure 0 define success 1 define uns32 unsigned int define m error format,args.printf format,args fflush stdout static pthread...