.NETでthread A
、オブジェクトをロックするとします。その間、thread B
とthread C
はブロックされ、オブジェクトがによってロック解除されるのを待ちますthread A
。
次に、thread A
オブジェクトのロックを解除します。次に選択されるスレッド(BまたはC)はどれですか?それはどのように決定されますか?
.NETでthread A
、オブジェクトをロックするとします。その間、thread B
とthread C
はブロックされ、オブジェクトがによってロック解除されるのを待ちますthread A
。
次に、thread A
オブジェクトのロックを解除します。次に選択されるスレッド(BまたはC)はどれですか?それはどのように決定されますか?
簡単な答えは、それは非決定論的であるということです-つまり、あなたは決して知りません。
中程度の答えは、ロックの取得を待機しているスレッドは、FIFOである「準備完了キュー」に入れられるということですが、これに依存することはできません。
長い答えは、レディキュー内のスレッドを「借用」して、APCと呼ばれる小さな作業を実行できるということです(Asynchronous Procedure Calls
)これが発生すると、スレッドはキュー内の位置を失い、APCが終了すると、レディに戻されます。キュー-しかし最後に。
だから、簡単な答えに戻ってください:あなたは決して知りません。
これは、(キューのように)ロックを取得しようとした最初のものである必要があります。詳細はこちらをご覧ください