我开发了一个我已经工作多年的c ++应用程序。我们最近在测试实验室中添加了4台处理器测试机。
执行此操作后,我们发现在负载下的特定测试会间歇性地导致LdrpLoaderLock
死锁,并且拥有的线程不再运行。拥有的线程id通常在数字上是暗示的,因为从正在运行的线程中推断出一个可能的线程id,并且锁存储器结构看起来不会损坏。
我在调试器中没有遇到此问题。事情发生后我才能看到它。我开始记录我正在创建的所有线程,我没有在那里看到问题线程ID。这可能没有意义,因为在发生死锁之后,日志记录可能无法正常工作。我想我需要一种方法来跟踪线程创建和入口点,以便我可以找出正在执行此操作的线程。任何帮助表示赞赏。
来自windbg
0:000> !locks CritSec ntdll!LdrpLoaderLock+0 at 775d20c0 WaiterWoken No LockCount 5 RecursionCount 2 OwningThread f38 EntryCount 0 ContentionCount 5 *** Locked
扫描了805个关键部分
0:000> !threads Index TID 0 00000ab8 1 000008cc 2 00000e68 3 0000134c 4 00000c44 5 000011a0 6 00000f18 7 00000908 8 00001084 9 00000f08 10 00001098 11 00001010 12 00000d40 13 0000135c
线程堆栈消耗的VM总量0x031cf000
0:000> d 775d20c0 775d20c0 60 43 5d 77 ea ff ff ff-02 00 00 00 38 0f 00 00 `C]w........8... 775d20d0 ac 04 00 00 00 00 00 00-40 43 5d 77 ff ff ff ff ........@C]w.... 775d20e0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 02 ................ 775d20f0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 775d2100 00 49 5d 77 ff ff ff ff-00 00 00 00 00 00 00 00 .I]w............ 775d2110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 775d2120 20 49 5d 77 ff ff ff ff-00 00 00 00 00 00 00 00 I]w............ 775d2130 00 00 00 00 a0 0f 00 00-00 00 00 00 00 00 00 00 ................
答案 0 :(得分:1)