執行緒的分離與非分離狀態
阿新 • • 發佈:2019-02-15
執行緒的分離狀態決定一個執行緒以什麼樣的方式來終止自己
非分離 【joinable】 分離 【detached】
非分離的執行緒能夠被其他執行緒收回其資源和殺死;在被其他執行緒回收之前,它的儲存器資源(如棧)是不釋放的【預設狀態】
分離的執行緒是不能被其他執行緒回收或殺死的,它的儲存器資源在它終止時由系統自動釋放
這裡要注意的一點是,如果設定一個執行緒為分離執行緒,而這個執行緒執行又非常快,它很可能在pthread_create函式返回之前就終止了,它終止以後就可能將執行緒號和系統資源移交給其他的執行緒使用,這樣呼叫pthread_create的執行緒就得到了錯誤的執行緒號。要避免這種情況可以採取一定的同步措施,最簡單的方法之一是可以在被建立的執行緒裡呼叫pthread_cond_timewait函式,讓這個執行緒等待一會兒,留出足夠的時間讓函式pthread_create返回。設定一段等待時間,是在多執行緒程式設計裡常用的方法。但是注意不要使用諸如wait()之類的函式,它們是使整個程序睡眠,並不能解決執行緒同步的問題。
在預設情況下執行緒是非分離狀態的,這種情況下,主執行緒等待被建立的執行緒結束。只有當pthread_join()函式返回時,被建立的執行緒才算終止,才能釋放自己佔用的系統資源
分離執行緒不是這樣子的,它沒有被其他的執行緒所等待,自己執行結束了,執行緒也就終止了,由系統回收資源。程式設計師應該根據自己的需要,選擇適當的分離狀態
參考:
http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.htm