線程的分離狀態決定一個線程以什么樣的方式來終止自己
非分離 【joinable】 分離 【detached】
非分離的線程能夠被其他線程收回其資源和殺死;在被其他線程回收之前,它的存儲器資源(如棧)是不釋放的【默認狀態】
分離的線程是不能被其他線程回收或殺死的,它的存儲器資源在它終止時由系統自動釋放
這里要注意的一點是,如果設置一個線程為分離線程,而這個線程運行又非常快,它很可能在pthread_create函數返回之前就終止了,它終止以后就可能將線程號和系統資源移交給其他的線程使用,這樣調用pthread_create的線程就得到了錯誤的線程號。要避免這種情況可以采取一定的同步措施,最簡單的方法之一是可以在被創建的線程里調用pthread_cond_timewait函數,讓這個線程等待一會兒,留出足夠的時間讓函數pthread_create返回。設置一段等待時間,是在多線程編程里常用的方法。但是注意不要使用諸如wait()之類的函數,它們是使整個進程睡眠,并不能解決線程同步的問題。
在默認情況下線程是非分離狀態的,這種情況下,主線程等待被創建的線程結束。只有當pthread_join()函數返回時,被創建的線程才算終止,才能釋放自己占用的系統資源
分離線程不是這樣子的,它沒有被其他的線程所等待,自己運行結束了,線程也就終止了,由系統回收資源。程序員應該根據自己的需要,選擇適當的分離狀態
參考:
http://www.49028c.com/mydomain/archive/2011/08/14/2138454.htm
新聞熱點
疑難解答