2011-03-17 9 views
1

ミューテックスはクリティカルセクションを保護するために使用されます。ダウンがすでにミューテックス上で行われているとしましょう。そして、それを行ったスレッドがCS内にある間に、他の10個のスレッドがそのすぐ後ろにあり、ミューテックスをダウンさせてスリープ状態にします。最初のスレッドがクリティカルセクションを終了し、ミューテックスをアップさせると、10スレッドがすべて起動し、やりたいこと、つまりクリティカルセクションに入るだけですか?それで、10人全員が同時にクリティカルセクションに入るかもしれないということを意味しないのでしょうか?mutexでupが実行されたときにスレッドには何が起こりますか?

答えて

1

いいえ、1つだけスレッドは目を覚まし、ミューテックスの所有権を取得します。残りの部分は眠り続けます。どのスレッドが目を覚ますかは、通常、非決定論的です。

上記は一般化されており、実装の詳細はシステムごとに異なります。たとえば、JavaではObject#notify()Object#notifyAll()を比較します。

+0

スレッドが起きると、スリープ状態になる前に次のことに進みますか? –

+0

次にしようとしていたことは、ミューテックスを取得することでした。ミューテックスが利用可能で、その間に何か他のものによって既に獲得されていない場合(これは起こり得る)、はい、それは起き上がり、それが何をしていたとしても継続するでしょう。 –

+0

mutexで複数のプロセスがダウンした場合、その値は0未満になりますか?その値を0または1以外にすることはできますか? –

関連する問題