簡體   English   中英

當整個過程終止時,未連接和未分離的線程會發生什么情況?

[英]What happens with unjoined and not detached threads when the whole process terminates?

預計線程,其上pthread_detach()不叫,應該pthread_join()主線程返回之前版main()或調用exit()

但是,如果不滿足此要求怎么辦? 當進程仍然包含未連接且未分離的線程時終止該進程會發生什么?

我會發現奇怪的是,在系統重新啟動之前,其他線程的資源不會被回收。 但是,如果將這些資源回收,那么可能幾乎不需要費心加入或分離,不是嗎?

這取決於操作系統。 典型的現代操作系統確實會回收廢棄線程使用的內存和描述符(句柄)。 這類似於動態分配的內存的工作方式:典型的現代系統會在進程退出時回收它,即使進程從未顯式釋放內存。 對於某些不尋常的程序,這可能是有意義的性能優化,因為釋放大量小資源需要時間,並且操作系統可能能夠更快地完成此操作。

但是,如果不滿足此要求怎么辦? 當進程仍然包含未連接且未分離的線程時終止該進程會發生什么?

在沒有POSIX線程的任何較SYS_exit系統上,當主線程執行SYS_exit系統調用時,未連接的線程只是簡單地“蒸發”到空間中。

我會發現奇怪的是,在系統重新啟動之前,其他線程的資源不會被回收。

他們會。

但是,如果將這些資源回收,那么可能幾乎不需要費心加入或分離,不是嗎?

這取決於這些線程的功能。 危險在於出口數據競賽。

C++ ,銷毀全局變量(通常通過atexit或等效的注冊機制),刪除FILE句柄等,等等。

如果未連接的線程嘗試訪問任何此類資源,則可能會因SIGSEGV崩潰,從而可能產生core轉儲以及不干凈的進程退出代碼,這兩者通常都是非常不希望的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM