MonitorHeld カウントが偶数であり、所有者スレッドがないことを示す syncblk 出力について話している投稿をいくつか見つけました。これは癖として説明されていますが、おそらく所有者スレッドが失敗したためにロックが移行中であり、所有者が存在しません。MonitorHeld カウントは、ウェイターごとに 2 ずつ、所有者ごとに 1 ずつ増加するため、偶数は、ウェイターはいるが所有者がいないことを意味します。
syncblk の MonitorHeld カウントはまだ奇数で、所有スレッドはありません。それは何を示していますか。また、このように見える 2 つの異なるインスタンスからの 2 つの異なるプロセス ダンプがあるため、適切なタイミングでダンプをキャプチャすることはできませんでした。
私のsyncblk出力:
インデックス SyncBlock MonitorHeld 再帰所有スレッド情報 SyncBlock 所有者 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 RCW1 ComClassFactory 0 無料 142 インデックス SyncBlock MonitorHeld 再帰所有スレッド情報 SyncBlock 所有者 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 RCW20 ComClassFactory 0 無料 76