2012-12-13 46 views
1

後不沾邊我花了一個例子,從爲什麼未連接的並行線程泄漏資源,當線程在pthread_create

https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html

使其無限運行(小睡眠使CPU使用率心不是一個瓶頸,所以沒有排隊的線程)通過與pthread_create創建線程,而不需要調用pthread_join。這會導致內存泄漏並最終導致PC內存不足。當創建線程程序後立即添加pthread_detach表現很好,並且在一段時間後內存使用率保持不變。

我當時的印象是,當一個線程退出時(關閉}的功能,如果給予pthread_create)所有的資源都被清除。

回答

8

我的印象是,當一個線程退出(關閉時)函數,如果給予pthread_create)清理其所有資源。

這是一個錯誤的印象。正如你所說的,當你調用pthread_join或線程是分離的線程時,所有的資源都會釋放出來用於完成的線程。

對於非分離的線程,必須保留一些資源 - 否則,您將無法通過稍後調用pthread_join來獲取線程的返回值。分離線程無法連接,因此無法從中獲取退出值。

許多實現將此返回值存儲在線程堆棧中,從而保持整個堆棧,直到有人在非分離線程上調用pthread_join。