等待链遍历

等待链遍历 (WCT) 允许调试器诊断应用程序挂起和死锁。

等待链是线程和同步对象的交替序列,其中每个线程都等待后面的对象。 后面的每个对象反过来又由链中的后续线程所拥有。

线程会从线程请求对象时开始等待同步对象,直到获取该对象为止。 从线程获得锁时开始,此由线程一直拥有,直到线程释放它。 换句话说,当线程 1 等待线程 2 拥有的锁时,线程 1 正在等待线程 2。

WCT 支持以下同步基元:

若要检索一个或多个线程的等待链,请使用 OpenThreadWaitChainSessionGetThreadWaitChain 函数创建 WCT 会话。 WCT 会话由 HWCT 类型的句柄来表示。

会话可以是同步或异步会话

在检索等待链之前,你无法取消同步会话并阻止调用线程。

异步会话不会阻止调用线程,并且可以使用 CloseThreadWaitChainSession 函数取消应用程序。 异步操作的结果通过应用程序提供的 WaitChainCallback 回调函数提供。

对于异步会话,调用方可以通过 GetThreadWaitChain 指定一个指向上下文数据结构的指针。 此同一指针会传递给 WaitChainCallback 回调函数。

上下文数据结构是用户定义的并且对 WCT 不透明。 应用程序可以使用上下文数据结构在 WCT 查询和回调函数之间传递上下文。 通常,您可以通过此结构传递事件句柄,并且在执行回调时,会发出此事件的信号,并通知监视线程查询已完成。

有关等待链遍历的示例,请参阅 使用 WCT

另请参阅