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