我想知道是否可以检查线程的状态,该线程可能处于可等待状态,但不一定如此,如果它处于可等待状态,我想将其保留在该状态。
基本上,如何在不更改线程(可等待)状态的情况下检查线程的状态。
通过等待,我的意思是如果我调用 wait(pid) 它会正确返回并且不会挂起。
我还要补充一点,我正在跟踪一个多线程程序,因此我无法更改它的代码。另外,我也省略了这个信息,但这是一个基于 Linux 的系统。
你问的是进程还是线程?这wait
函数作用于进程,而不是线程,因此您所写的问题无效。
对于(子)进程,您可以通过调用来检查状态waitid
与WNOWAIT
旗帜。这将使进程处于等待状态。
对于线程,在某些实现上您可以调用pthread_kill(thread, 0)
并检查ESRCH
离开时判断线程是否已退出thread
处于可连接状态。请注意,这是有效的仅当线程可连接时。如果它已分离或已加入,则您将调用未定义的行为,并且您的程序应该崩溃或更糟。不幸的是,没有要求pthread_kill
report ESRCH
在这种情况下,因此它可能会错误地报告线程仍然存在,而实际上它已经终止了。当然,正式的有没有不同在调用之间永远存在的线程之间pthread_exit
和实际终止,以及实际上已经完成终止的线程,所以这个问题有点没有意义。换句话说,不要求可连接线程终止直到pthread_join
被阻塞等待其终止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)