—-介紹——
* 在任何乙個時間點上,執行緒都是可分離或者可結合的。乙個可結合的執行緒能夠被其它執行緒收回其資源和殺
死。在其他執行緒**之前,他的儲存器資源(例如棧)是不釋放的。相反,乙個分離的執行緒是不能被其他
執行緒**或者殺死,他的儲存器資源在它終止時系統自動釋放。
* 建立執行緒函式原型 :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 由於呼叫...