int pthread_cancel(pthread_t thread)
#include<pthread.h>
傳送終止信號給thread執行緒,如果成功則返回0,否則為非0值。傳送成功並不意味著thread會終止。
若是在整個程式退出時,要終止各個執行緒,應該在成功傳送 CANCEL 指令後,使用 pthread_join 函式,等待指定的執行緒已經完全退出以後,再繼續執行;否則,很容易產生 “段錯誤”。
int pthread_setcancelstate(int state, int *oldstate)
設定本執行緒對Cancel信號的反應,state有兩種值:PTHREAD_CANCEL_ENABLE(預設)和 PTHREAD_CANCEL_DISABLE,分別表示收到信號後設為CANCLED狀態和忽略CANCEL信號繼續運行;old_state如果不為 NULL則存入原來的Cancel狀態以便恢復。
int pthread_setcanceltype(int type, int *oldtype)
設定本執行緒取消動作的執行時機,type由兩種取值:PTHREAD_CANCEL_DEFERRED和 PTHREAD_CANCEL_ASYNCHRONOUS,僅當Cancel狀態為Enable時有效,分別表示收到信號後繼續運行至下一個取消點再退出和 立即執行取消動作(退出);oldtype如果不為NULL則存入原來的取消動作類型值。
此函式應該線上程開始時執行,若執行緒內部有任何資源申請等操作,應該選擇 PTHREAD_CANCEL_DEFERRED 的設定,然後在退出點(pthread_testcancel 用於定義退出點)進行執行緒退出。
void pthread_testcancel(void)
檢查本執行緒是否處於Canceld狀態,如果是,則進行取消動作,否則直接返回。 此函式線上程內執行,執行的位置就是執行緒退出的位置,在執行此函式以前,執行緒內部的相關資源申請一定要釋放掉,他很容易造成記憶體泄露。