syncblk与奇数MonitorHeld计数,没有所有者

时间:2013-10-04 23:09:53

标签: windbg

我发现了很多关于syncblk输出的帖子,它显示了MonitorHeld计数的偶数,没有所有者线程。这被解释为一个怪癖,锁定正在转换可能是因为所有者线程失败了,所以没有所有者。对于每个服务员,MonitorHeld计数增加2,对于所有者,MonitorHeld计数增加一个,因此,偶数表示您有服务员但没有所有者。

我的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

1 个答案:

答案 0 :(得分:2)

锁定处于转换状态或孤立状态。当拥有的线程终止而不释放它时,SyncBlk是孤立的。