2014-02-15 35 views
2

在手冊頁pthread_detach我讀到,當任何線程分離時,然後在線程終止時,它釋放其資源回到系統。當線程釋放其資源

什麼是線程資源?它是否是該線程所使用的內存的一部分,如果是這樣的話,則內存是進程地址空間的一部分。我試圖理解這一點,但我知道了。

那麼可聯接線程呢,線程什麼時候釋放它的資源呢?在pthread_join時,或在終止或過程的時間?

當在pthread_cancel命令中釋放資源時。

回答

2

每個線程都會在操作系統中消耗一定數量的簿記資源,並在用戶空間內存中佔用其自己的執行堆棧。當線程被銷燬這些資源被釋放,可幾個條件,比如下發生:在可連接的線程調用時

  • pthread_join回報,
  • 分離線程的入口函數返回,
  • main回報正常或exit被調用,
  • 由於接收未處理的信號,終止進程
  • exec被成功調用。

但是,退出正在運行main的線程並保持其他正在運行的分離線程是可能的。爲此,您必須在主線程中調用pthread_exit

+0

那麼'pthread_cancel'和一個線程返回並且沒有被主線程加入呢? –

+1

@Abhiteshkhatri:取消對討論無關緊要。您仍然需要加入該線程,特別是如果您想知道取消是否有效。有關詳細信息,請參見[手冊](http://man7.org/linux/man-pages/man3/pthread_cancel.3.html)。 –