1

重複の可能性:
.NET でのロック (モニター) 内部実装

Monitor.Enter() メソッドがどのように機能するのか疑問に思っていますか? ヒープに割り当てられた各オブジェクトには、それに関連付けられた Sync Block 構造体があることを理解しています。SyncBlock 構造体には、モニター、ハッシュコード、AppDomainID、および com/unmanaged コードと相互運用するためのサンク データのフィールドが含まれています。CLR は複数のロック要求をどのように処理しますか? 1 つのスレッドがロックを保持している場合 (おそらく、SyncBlock データ構造の Monitor フィールドの値を増やすことによって)、他のスレッドは WaitSleepJoin 状態になります。CLR はこのような状態のスレッドをどのように処理し、ロックが解放されると、他のスレッドがロックを待機し続けている間、1 つのスレッドのみが再開されるようにしますか? CLR は WaitHandle オブジェクトを作成し、スレッドを WaitHandle オブジェクトで待機させますか?

4

0 に答える 0