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