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