【发布时间】:2010-06-19 19:34:04
【问题描述】:
我知道有一个用于多进程
waitpid(-1,WNOHANG,NULL)
这是一个非阻塞函数调用,用于检查当前是否有任何子进程在工作
但是有没有类似的 lib 函数来检查多线程?
我要做的就是检查当前是否有任何线程,如果没有重置一些全局值。
【问题讨论】:
标签: c multithreading waitpid
我知道有一个用于多进程
waitpid(-1,WNOHANG,NULL)
这是一个非阻塞函数调用,用于检查当前是否有任何子进程在工作
但是有没有类似的 lib 函数来检查多线程?
我要做的就是检查当前是否有任何线程,如果没有重置一些全局值。
【问题讨论】:
标签: c multithreading waitpid
这是一个非阻塞函数调用,用于检查当前是否有任何子进程在工作
错了。这是一个检查是否有任何子进程尚未终止的调用。它不仅会检查而且还会收获一个终止的孩子(如果有的话)。孩子们可能处于其他任何可能的状态,例如陷入僵局(我的书上的内容远非工作)。
我要做的就是检查当前是否有任何线程,如果没有重置一些全局值。
也许你应该在这里发布一个问题,你为什么要这样做。听起来你做错了什么。
如果您还没有为您的线程执行 pthread_join(),这意味着您的线程已经执行了 pthread_detach()。如果您在添加线程时没有问题 pthread_detach() 我认为向线程添加一些额外的代码以识别它们(几乎)终止(例如 sem_post())是没有问题的,以便 main() 可以注意到线程已终止(例如通过调用 sem_trylock())。
如果不要求可移植性,也可以尝试定期查询进程的操作系统线程数。
虽然在程序中拥有一些线程,具有未定义的生命周期,与主线程没有任何适当的同步,这仍然是 IMO 错误。
【讨论】:
你可以只保存一个线程的句柄并有一个函数来检查它是否仍在运行。我不确定是否有功能,但这应该可以。
【讨论】:
pthread_kill(pid, 0) 其中 pid 是 pthread_create 返回的线程 id 可以告诉您线程是否还活着。 (这就是我理解你的问题的方式) 如果线程还活着,则返回 0,否则返回错误代码。
【讨论】:
【讨论】: