我发现了很多关于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
答案 0 :(得分:2)
锁定处于转换状态或孤立状态。当拥有的线程终止而不释放它时,SyncBlk是孤立的。