windbg - 具有奇数 MonitorHeld 计数且无所有者的syncblk

标签 windbg

我发现许多讨论syncblk 输出的帖子显示MonitorHeld 计数为偶数且没有所有者线程。这已被解释为一个怪癖,锁正在转换,可能是因为所有者线程失败,所以没有所有者。对于每个服务员,MonitorHeld 计数增加 2,对于所有者,MonitorHeld 计数增加 1,因此,偶数意味着您有服务员但没有所有者。

我的syncblk 显示MonitorHeld 计数为奇数,没有拥有线程。这说明什么?另外,我有来自两个不同实例的两个不同的进程转储,如下所示,因此,这不是在正确的时间捕获转储的情况。

我的syncblk输出:

Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
  164 000000000a4d2428            1         1 000000002e406d30 16ac 144   0000000012f107c0 System.Object
  368 000000000a3eb378         1125         0 0000000000000000     none    00000000104b1a38 System.Object
  401 000000000a4d2888            1         1 000000002e79cce0 21a0 123   00000000110b09b0 System.Object
  505 000000000a516918            1         1 000000002e55ca70 95c 114   00000000110984f0 System.Object
  563 0000000002ae7978            1         1 000000002e7e1910 2058 261   00000000127d0300 System.Object
  678 0000000002ae7f18            3         1 000000000a462240 f44 156   0000000012a66a28 System.Object
-----------------------------
Total           814
CCW             0
RCW             1
ComClassFactory 0
Free            142

Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
  122 000000002e561d98            3         1 000000000a621400 1410 180   0000000012cfcf28 System.Object
  164 000000000a4d2428            1         1 000000002e406d30 16ac 145   0000000012f107c0 System.Object
  368 000000000a3eb378          951         0 0000000000000000     none    00000000104b1a38 System.Object
  401 000000000a4d2888            1         1 000000002e79cce0 21a0 124   00000000110b09b0 System.Object
  505 000000000a516918            1         1 000000002e55ca70 95c 115   00000000110984f0 System.Object
  563 0000000002ae7978            1         1 000000002e7e1910 2058 263   00000000127d0300 System.Object
-----------------------------
Total           814
CCW             0
RCW             20
ComClassFactory 0
Free            76

最佳答案

锁要么处于转换状态,要么处于孤立状态。当拥有的线程终止而不释放它时,SyncBlk 就会成为孤立的。

关于windbg - 具有奇数 MonitorHeld 计数且无所有者的syncblk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19192115/

相关文章:

visual-studio - 如何使用 !DumpHeap (.load sos) 仅转储第一个对象地址

windbg - 加载 .NET 2 或 .NET 4 时如何设置断点?

windbg - !dumpobj in windbg,Domain :Value dynamic statics NYI 002a8428:NotInit mean? 是什么

windbg - 转储文件 + PDB 文件 - 是否可以在一台 PC 上创建转储然后在另一台 PC 上进行调查?

windbg - 这些 Windbg 错误消息是什么意思?

windbg - 如何使用 VirtualBox 从另一台 VM 调试一台 VM 中的 Windows?

reverse-engineering - 符号不匹配,ida/windbg

asp.net - 在 ASP.NET 中诊断 "Thread was being aborted."

c# - 为什么我的堆上有两个空的 ThreadAbortExceptions?

windbg - 如何找到 'Access Violation' 的来源