如何知道线程是否在等待队列中

时间:2017-05-11 09:56:13

标签: c# windows multithreading debugging windbg

如果您没有源代码,那么除了查看其callstack(k!sosex.mk!clrstack!eestack)之外,有一种方法可以告诉一个线程目前在等待队列中等待发生的事情,比如等待接收I / O中断或来自I / O完成端口的通知吗?

或者可能只是一个没有等待 on 的休眠线程,但是仍然在等待队列中的那个还没有?

为了测试,我制作了一个小型的C#程序,让我在线程中休眠20秒。

main()
{
  Thread.Sleep(20000);
}

我将Windbg附加到其进程中。并检查其线程状态,并且休眠线程报告线程状态为0x202a020

00:00> !threadstate 202a020
Legal to Join
CoInitialized
In Multi Threaded Apartment
Fully initialized
Interruptible

我理解每个状态标志,除了我不是很清楚最后一个,即可中断。我的猜测是 Interruptible 标志只是表明线程可能被任何内核级中断中断,但并不一定表明它在等待队列中。即使是正在运行的状态线程也可能被中断,对吧?

那么,是否有一种万无一失的方法来了解一个线程目前是否在等待队列中?或者即使它位于就绪队列但尚未运行?

0 个答案:

没有答案