2011-04-23 124 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