linux執行緒系列(5)執行緒清理和控制函式

2021-08-01 23:44:56 字數 924 閱讀 6123

執行緒清理函式有兩個push和pop函式:

#include void pthread_cleanup_push(void (*rtn)(void *), void* arg);

void pthread_cleanup_pop(int execute);

返回: 成功返回0,否則返回錯誤編號

引數rtn:清理函式指標

arg:呼叫清理函式傳遞的引數

execute:值1時執行執行緒清理函式, 值0時不執行執行緒清理函式。

這兩個函式在子執行緒中被呼叫,必須成對出現(有push,必須有pop),當子執行緒結束的時候,如果execute的值為非零,push函式中的清理函式就會被執行。

子執行緒結束包括子執行緒呼叫return、呼叫pthread_exit、響應取消請求(其它執行緒呼叫pthread_canel函式,取消該執行緒)等。

由於採用了棧的機制,先push的清理函式後執行,如下面**,首先列印second clean func,再列印first clean func:

#include #include #include //定義執行緒清理函式

void clean_fun(void &arg)

void* th_fun(void *arg)

int main()

pthread_join(th1, null);

printf("th1(%lx) finished\n", th1);

if((err = pthread_create(&th2, null, th_fun, (void*)1)) != 0)

pthread_join(th2, null);

printf("th2(%lx) finished\n", th2);

return 0;

}

linux執行緒系列(3)執行緒建立

執行緒建立函式如下 include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict arg 返回 成功返回0,否則返回錯誤編...

執行緒清理函式

下面是一篇關於該知識點的文字,覺得不錯,分享下 下面的測試程式我們都省略錯誤檢查 如同程序可以呼叫atexit函式安排在他退出時需要呼叫的函式一樣,程序也可以安排在他退出時呼叫的 函式。這些清理函式記錄在棧中,所以他們執行的順序和註冊的順序是相反的。incldue void pthread clea...

POSIX 執行緒清理函式

posix 多執行緒的 cleanup 函式 控制清理函式的函式有兩個,乙個是 pthread cleanup push 用來把清理函式壓入棧中,另乙個是 pthread cleanup pop 用來把棧中的函式彈出來。下面是這兩個函式的函式原型 include void pthread clean...