執行緒與exec fork exit

2021-09-13 18:47:06 字數 930 閱讀 4266

只要有任一線程呼叫了exec()系列函式之一時,呼叫程式將被完全替換。除了呼叫exec()的執行緒之外,其他所有執行緒都將立即消失。沒有任何執行緒會針對執行緒特有資料執行結構函式,也不會呼叫清理函式。該程序的所有互斥量(為程序私有)和屬於程序的條件變數都會消失。呼叫exec()之後,呼叫執行緒的執行緒id是不確定的。

當多執行緒程序呼叫fork()時,僅會將發起呼叫的執行緒複製到子程序中。子程序中該執行緒的執行緒id與父程序中發起fork()呼叫執行緒的執行緒id相一致(後面會有例子說明)。其他執行緒均在子程序中消失,也不會為這些執行緒呼叫清理函式以及針對執行緒特有資料的析構函式。這將導致如下一些問題。

由於這些問題,推薦在多執行緒程式中呼叫fork()的唯一情況時:其後緊跟對exec()的呼叫。因為新程式會覆蓋原有記憶體,exec()將導致子程序的所有pthreads物件消失。對於那些必須執行fork(),而其後又無exec()跟隨的程式來說,pthreads api提供了一種機制:fork處理函式。可以利用函式pthread_atfork來建立fork處理函式。

#include #include #include #include #include #include void *handle1(void *arg)

case 0:

default:

}}void *handle2(void *arg)

int main(int argc, char *ar**)

輸出資訊:

handle1 tid = 1084647760

handle2 tid = 1109567824

fork tid = 1084647760

可以看到,fork的tid和執行緒一的相同

如果任何執行緒呼叫了exit(),或者主線程執行了return,那麼所有執行緒都將消失,也不會執行執行緒特有資料的析構函式以及清理函式。

執行緒與程序相關1 執行緒與多執行緒

1.2.1 概念理解 1.2.2 執行緒的狀態1.3.1 標準庫threading python中的執行緒開發使用標準庫threading,程序靠執行緒執行 至少有乙個主線程,其他執行緒是工作執行緒,主線程是第乙個啟動的執行緒,即從上到下 執行的那個執行緒,工作執行緒是在主線程執行的基礎上進行分支並...

執行緒與訊號,執行緒與鎖

include include includepthread mutex t number mutex pthread mutex initializer int globvar 0 void write p void arg void read p void arg int main sleep ...

執行緒 執行緒建立與終止

include intpthread create pthread t restrict thread,const pthread attr t restrict attr,void start routine void void restrict arg 0,失敗返回錯誤號。0,失敗返回 1,而錯...