2011-04-23 169 views
7

如何知道pthread是否死亡?如何知道pthread是否死亡

有沒有辦法檢查pthreads狀態?

+2

應該指出,線程不能只是「死」。 (1)從其開始函數返回,(2)調用'pthread_exit',(3)調用作爲取消點的函數,同時取消未被阻止,並且已經調用了'pthread_cancel',或者(4)在異步取消生效的同時作爲'pthread_canel'的目標。 – 2011-06-14 04:41:47

回答

10
if(pthread_kill(the_thread, 0) == 0) 
{ 
    /* still running */ 
} 

參見:pthread_kill

注:有一種內在的風險,使用pthread_kill()測試是否 線程仍在運行。看到這個帖子了一個解釋: How do I determine if a pthread is alive?

+0

這會先殺死線程還是嘗試這樣做。或者它只是檢查它?謝謝 – jarryd 2011-04-23 13:52:06

+0

從上面的鏈接:_「在kill()中,如果sig爲零,應該執行錯誤檢查,但實際上不會發送信號」_「。這意味着不,它不會殺死線程。它只會告訴你它是否仍然存在。 – Damon 2011-04-23 13:53:34

+0

非常感謝! ;) – jarryd 2011-04-23 13:54:11

4

如果您不需要編寫便攜式應用程序並可以使用GNU擴展,則可以使用pthread_tryjoin_np。我相信除了在兩個線程之間建立通信(例如,使用線程擁有的全局互斥鎖,只要它處於活動狀態)之外,沒有其他方法可以實現它。

+0

upvote for the mutex idea! – Mawg 2016-06-30 09:31:03

3

我要加入到討論的事實,一個線程可以在未在信號的情況下,這裏提到如SIGPIPE另一種情況就是死當它是不是由主機進程或線程自己處理,並在可能出現這種信號的情況下處理

+0

這對整個過程是致命的,而不僅僅是一個線程。 – 2016-09-26 11:39:12