linux 執行緒的分離與可結合

2021-07-27 08:47:24 字數 1869 閱讀 1385

—-介紹——

* 在任何乙個時間點上,執行緒都是可分離或者可結合的。乙個可結合的執行緒能夠被其它執行緒收回其資源和殺

死。在其他執行緒**之前,他的儲存器資源(例如棧)是不釋放的。相反,乙個分離的執行緒是不能被其他

執行緒**或者殺死,他的儲存器資源在它終止時系統自動釋放。

*     建立執行緒函式原型 :int pthread_create(pthread_t *thread, const pthread_attr_t  

* attr, void *(*start_routine) (void *), void *arg);

* 分離執行緒函式原型 : int pthread_detach(pthread_t thread)

* 等待執行緒函式原型: int pthread_join(pthread_t thread, void **retval);

* * 1. 分離執行緒的情況 : 執行緒可以自己呼叫分離函式來分離自己,也可被別的執行緒呼叫分離函式從而

* 分離執行緒,執行緒分離後,就代表沒有任何其它的執行緒可以使用pthread_join() 來等待它。

* * 2. 預設情況下,執行緒被建立成可結合的。每個可結合執行緒都應該被顯示的**,即通過呼叫

* pthread_join();

—–注意&備註:—–

一 . 等待執行緒的第二個引數屬於建立執行緒的函式的返回值的&再強制型別轉換為

void**。

二 . 其中自己使自己分離有一些注意事項:對於新執行緒來說,自己已經是分離狀態了

,但對於主線程來說,主線程不清楚新執行緒是否是分離狀態,所以當我分別在兩天centos作業系統的機子

上在主線程用 「已分離的執行緒無法通過使用pthread_join()等待該執行緒」進行 驗證的時候,出現了兩種

情況:一種是,主線程等待新執行緒執行結束,主線程再結束,另一種是直接返回錯誤資訊。

:結論:當你想要使某個執行緒變成可分離狀態的時候,最好不要執行緒自己分離自己。

#include

#include

#include

#include

#include

void* thread_run(void *argc)

count++;

}printf("new thread done\n");

return (void*)23;

}int main()

/*呼叫pthread_join()後,若該執行緒沒有執行結束,則呼叫者會被阻塞,一直等待新執行緒結束,

呼叫者才會繼續執行*/

//新執行緒已經設定為分離狀態,則執行緒結束執行時會自動釋放所有資源,而無需被等待

int exitcode;

pthread_detach(tid); //使得新執行緒分離

int errorcode = pthread_join(tid,(void**)&exitcode);

if( errorcode != 0)

//這種情況,函式在執行到該位置時,輸出錯誤資訊

while(1)

return

0;}

程式結果截圖:

已經分離的新執行緒 當主線程中呼叫pthread_detach():

已經分離的新執行緒 在自己的執行緒中呼叫pthread_detach():

Linux 執行緒的分離與結合

在開始執行緒部分內容前,我想還是先把這個概念丟擲來,否則在開始 執行緒的建立 屬性 中會有部分內容不太清楚。原理簡述 在任何乙個時間點上,執行緒是可結合的 joinable 或者是分離的 detached 執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。在預設情況下執行緒是非分離狀態的。在這...

Linux多執行緒,執行緒的分離與結合

2 執行緒的分離與結合 在任何乙個時間點上,執行緒是可結合的 joinable 或者是分離的 detached 乙個可結合的執行緒能夠被其他執行緒收回其資源和殺死 在被其他執行緒 之前,它的儲存器資源 如棧 是不釋放的。相反,乙個分離的執行緒是不能被其他執行緒 或殺死的,它的儲存器資源在它終止時由系...

執行緒的分離與結合

執行緒是可結合或分離的。乙個可結合的執行緒能夠被其他執行緒收回資源和殺死。相反,乙個分離的執行緒是不能被其他執行緒收回或殺死的,它的儲存器資源在它終止時由系統自動釋放。預設情況下,執行緒被建立為可結合的。執行緒分離函式 int pthread detach pthread t thread 由於呼叫...