ミューテックスは、クリティカル セクションを保護するために使用されます。ミューテックスでダウンがすでに行われているとしましょう。それを行ったスレッドが CS にある間、他の 10 個のスレッドがそのすぐ後ろにあり、ミューテックスでダウンを行い、スリープ状態になります。最初のスレッドがクリティカル セクションを出てミューテックスを起動すると、10 個のスレッドすべてが起動し、実行しようとしていたこと、つまりクリティカル セクションに入る操作を再開しますか? それでは、10 個すべてが同時にクリティカル セクションに入る可能性があるということではないでしょうか?
1 に答える
1
いいえ、1 つのスレッドだけがウェイクアップしてミューテックスの所有権を取得します。残りは眠ったままになります。通常、どのスレッドがウェイクアップするかは非決定論的です。
上記は一般論であり、実装の詳細はシステムごとに異なります。たとえば、Java ではObject#notify()とObject#notifyAll()を比較します。
于 2011-03-17T22:18:01.113 に答える