pthread_join()和pthread_detach()

肆空界發表於2024-10-13

pthread_join()
有時候我們想在一個執行緒中等待另一個執行緒結束,pthread_join()則為我們提供了這個功能。例如,我們在main執行緒中建立了子執行緒,需要先等待子執行緒退出,最後才從main函式退出。

使用pthread_join的理由如下
一個執行緒終止後,如果沒有別的執行緒對它join,那麼該終止執行緒佔用的資源,系統將無法回收,也叫作殭屍執行緒。因此,我們去join某個執行緒,意思是告訴作業系統,這個執行緒終止後的資源可以回收了

pthread_detach()
與pthread_join()不同,pthread_detach()的作用是分離某個執行緒:被分離的執行緒終止後,系統能自動回收該執行緒佔用的資源

總結
綜上,pthread_join()和pthread_detach()的區別就是:
1. pthread_join()是阻塞式的,執行緒A連線(join)了執行緒B,那麼執行緒A會阻塞在pthread_join()這個函式呼叫,直到執行緒B終止
2. pthread_detach()是非阻塞式的,執行緒A分離(detach)了執行緒B,那麼執行緒A不會阻塞在pthread_detach(),pthread_detach()會直接返回,執行緒B終止後會被作業系統自動回收資源

注意
需要注意的是一個執行緒被detach後就不能被join了

相關文章