[心得]使用WCT API来侦测程序死锁问题

本文介绍了微软从Windows Vista开始提供的WCT API,用于检测线程死锁问题。通过创建WCT会话并指定线程ID,可以获取等待链信息,判断是否存在环等待,从而确定线程是否死锁。尽管WCT API存在限制,如最多只能获取16个等待节点,但它仍是一种有价值的调试工具。作者还分享了一个基于WCT的死锁检测小程序的界面截图和下载链接。
摘要由CSDN通过智能技术生成

WCT( Wait Chain Traversal) 是微软在Windows Vista开始提出的一套检测线程死锁的API机制。

在介绍这套API之前,我先介绍一下什么是死锁。

A线程等待B线程的某个资源,同时B线程等待A线程的某个资源,这时A,B线程都永远无法执行,这种情况叫做死锁。

如果用有向图中的点来表示程序,用边来表示程序之间的等待关系的话,若:

有向图G中存在着环,则环上的所有程序都处于死锁状态。

WCT正是可以检测出某个线程是否存在环等待的情况。

要使用WCT API来检查死锁,则首先必须创建一个WCT 会话。

HWCT WINAPI OpenThreadWaitChainSession(
  __in      DWORD Flags,
  __in_opt  PWAITCHAINCALLBACK callback
);

第一个参数是指定同步或者异步方式,绝大多数都选择同步方式,如果你要异步方式的话,第二个参数是回调函数。

打开了这样的一个API后,你就可以通过指定线程ID来获取线程的等待链

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值