1

.NETでthread A、オブジェクトをロックするとします。その間、thread Bthread Cはブロックされ、オブジェクトがによってロック解除されるのを待ちますthread A

次に、thread Aオブジェクトのロックを解除します。次に選択されるスレッド(BまたはC)はどれですか?それはどのように決定されますか?

4

2 に答える 2

5

簡単な答えは、それは非決定論的であるということです-つまり、あなたは決して知りません。

中程度の答えは、ロックの取得を待機しているスレッドは、FIFOである「準備完了キュー」に入れられるということですが、これに依存することはできません。

長い答えは、レディキュー内のスレッドを「借用」して、APCと呼ばれる小さな作業を実行できるということです(Asynchronous Procedure Calls)これが発生すると、スレッドはキュー内の位置を失い、APCが終了すると、レディに戻されます。キュー-しかし最後に。

だから、簡単な答えに戻ってください:あなたは決して知りません。

于 2013-01-19T17:37:04.730 に答える
2

これは、(キューのように)ロックを取得しようとした最初のものである必要があります。詳細はこちらをご覧ください

于 2013-01-19T17:29:23.830 に答える