我发现许多帖子讨论了 syncblk 输出,显示 MonitorHeld 计数为偶数且没有所有者线程。这被解释为一个怪癖,锁在转换中可能是因为所有者线程失败了,所以没有所有者。MonitorHeld 计数为每个服务员增加 2,为所有者增加 1,因此,偶数表示您有服务员但没有所有者。
我的 syncblk 显示 MonitorHeld 计数的奇数,没有拥有线程。这说明什么?另外,我有来自两个不同实例的两个不同的进程转储,看起来像这样,这不是在正确的时间捕获转储的情况。
我的同步块输出:
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 164 000000000a4d2428 1 1 000000002e406d30 16ac 144 0000000012f107c0 System.Object 368 000000000a3eb378 1125 0 0000000000000000 无 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 ----------------------------------------- 总计 814 逆时针 0 RCW 1 ComClassFactory 0 免费 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 无 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 ----------------------------------------- 总计 814 逆时针 0 RCW 20 ComClassFactory 0 免费 76