pthread が待機する前に、mutex を使用してロックし、他のコードが条件変数を変更しようとしないようにします。次に、mutex のロックを解除し、シグナルを待ちます。
たとえば、他のスレッドで同じミューテックスをロックし、その後「シグナル」を使用したとします。スレッドのロックを解除します。シグナルが完了すると、待機中のスレッドが起動し、ミューテックスを再度取得します。
Thread1 Thread2
{ {
lock(mutex); lock(mutex);
wait(mutex); signal(mutex);
unlock(mutex); unlock(mutex);
} }
3 つのスレッド 1 ステートメントが while(1) ループで囲まれているとします。次に、スレッド 2 がミューテックスをロックし、それを通知して、ミューテックスをロック解除するとします。そして終わらず眠りにつく。
では、条件変数の値は永続的に変更されるのでしょうか? スレッド 1 の 3 つのステートメントが無限ループで実行されている場合、待機することはなく、シグナルが与えられたことを検出するだけでしょうか? 待機呼び出しが戻ったときに、条件変数の値を初期値に戻しますか?
はいの場合、変数に対して create、destroy、または initialize メソッドを使用して値を元に戻すことはできますか? はいの場合、どのように?これらの関数は正確に何をしますか?
ありがとう、