如何检查任何线程当前正在工作

时间:2010-06-19 19:34:05

标签: c multithreading waitpid

我知道有一个多进程

 waitpid(-1,WNOHANG,NULL)

这是非阻塞函数调用,用于检查当前是否有正在处理的子进程

但是有没有类似的lib函数来检查多线程?

我想做的就是检查当前是否有任何线程,如果没有重置某些全局值。

4 个答案:

答案 0 :(得分:0)

您可以保存线程的句柄并具有检查它是否仍在运行的功能。我不确定是否有功能,但这应该有效。

答案 1 :(得分:0)

pthread_kill(pid,0)其中pid是pthread_create返回的线程ID,可以告诉您线程是否仍然存活。 (这就是我理解你的问题的方法) 如果线程仍处于活动状态,则返回0,否则返回错误代码。

答案 2 :(得分:0)

  

这是非阻塞函数调用,用于检查当前是否有正在处理的子进程

错误。这是一个检查是否有任何子进程尚未终止的调用。它不仅可以检查,还可以获得已终止的孩子,如果有的话。孩子们可能处于任何可能的状态,比如陷入僵局(我书上的内容远不是工作)。

  

我想做的就是检查当前是否有任何线程,如果没有重置某些全局值。

可能你应该在这里发帖,问你为什么要这样做。听起来你做错了。

如果你没有为你的线程做过pthread_join(),那就意味着你的线程已经做了pthread_detach()。如果您没有问题添加到您的线程pthread_detach()我认为添加一些额外的代码到线程以确定他们(几乎)终止(例如sem_post())以便main()可以注意到一个没有问题线程已终止(例如通过调用sem_trylock())。

如果不需要可移植性,那么也可以定期尝试查询OS的线程数。

虽然在某个程序中有一些未定义生命周期但没有与主线程正确同步的线程仍然是IMO错误的。

答案 3 :(得分:0)

我问自己一些非常相似的东西:

POSIX API call to list all the pthreads running in a process

在你的情况下,我会结束ps -eLF