运行DeadLockTest.exe,程序挂起。
三、 死锁检测检测工具见《Windows核心编程》,第9章9.8.6节LockCop检测工具。工具源码地址:http://www1.wintellect.com/Resources/Details/86。LockCop可使用vs2010编译成功。备注:该工具使用了Windows Vista/ 7提供的WCT API,故需要在Windows Vista/ 7系统运行LockCop检测工具。检测,挂起的DeadLockTest.exe,得到线程信息。检测到程序挂起由死锁引起。线程4014:等待线程772、线程4012完成。线程772:拥有关键代码段A,等待关键代码段B(被线程4012拥有)。线程4012:拥有关键代码段B,等待关键代码段A(被线程772拥有)。线程772与4012互相等待,程序发生死锁现象。
四、 打印信息为了便于查找问题,我们加上线程打印信息。打印线程名称、线程ID以及关键代码段进入信息。
五、 死锁修改线程互斥进行修改,Thread1与Thread2对关键代码段的进入与退出顺序改为相同。程序运行正常。修改后线程代码。