2013-11-24 41 views
-2

因此可以說你在main(線程1)中創建一個線程。該線程從文件中獲取一些輸入,並創建多個其他線程(線程2 ...等)來處理某些內容。在退出線程1之前是否必須退出其他線程(線程2 ...)?如果是這樣,我將如何去等待線程1產生的所有線程完成?在離開啓動它的線程之前,您是否必須等待子線程完成?

+0

https://computing.llnl.gov/tutorials/pthreads/ –

+0

「通過讓main()顯式調用pthread_exit()作爲最後一件事情,main()會阻塞並保持活動狀態以支持它的線程。直到完成爲止。「這對於其他不是主要的線程適用嗎?所以如果我在線程1的末尾有pthread_exit(),它會等待其他線程? – Doug

+2

@mashedtatoes如果應用於其他線程,則不一致。其他線程*不能從'main'返回,也不能在其他線程中阻塞'main'。所以這沒有任何意義。如果其他線程調用'pthread_exit',則它們退出。 –

回答

0

不,您不必等待其他線程退出,在大多數情況下。整個線程的重點是啓動一個子進程,它主要獨立於啓動它的線程。

如果您不在乎線程何時退出,您通常應該分離線程。否則,它會假設你關心它的退出狀態,並且它會坐在那裏佔用資源 - 即使退出後 - 直到某個其他線程加入它以檢索退出狀態。

+0

好的,謝謝你,我剛剛瞭解到創建多個進程,現在我正在學習線程,所以我對我的任務有點困惑。 – Doug

1

線程間沒有父/子關係。線程都是同伴。線程啓動另一個線程並沒有什麼區別,所有線程都是包含它們的進程的相同部分。

有關調用從mainpthread_exit特殊規則僅適用於因爲main返回終止過程。其他線程沒有這種擔心 - 他們只能通過調用exit或類似的函數來終止進程。

請注意,您應該要麼加入或分離每個線程。你可以分離你的所有線程,然後你不必擔心加入它們 - 它們只會運行完成,然後自行清理。

相關問題