1
wait(mutex);
...
body of F
...
if (next count > 0)
signal(next);
else
signal(mutex);

これはモニター用のコードですが、条件変数 x とどのように関連しているのかわかりません。

x count++;
if (next count > 0)
signal(next);
else
signal(mutex);
wait(x sem);
x count--;

ここにwait()のコードがあります

if (x count > 0) {
next count++;
signal(x sem);
wait(next);
next count--;
}

ここに signal() のコードがあります

私は、wait() と signal() を使用して一度に 1 つのプロセスをモニターに送信し、共有データへのアトミック アクセスを保証するためにそれらをキューに入れることができることを知っていますが、コードがどのように機能するのかわかりません。 wait() のシグナルミューテックスはここでは役に立たないためです(モニターのミューテックスはすでに1に初期化されています)。モニターは別のスレッドで実行されていますか? また、条件変数とモニターは同じセマフォ next とミューテックスを使用していますか?

私はそれがどのように機能するかよくわかりません.1つのキューがあり、プロセスが一時停止するたびに別のプロセスがキューから取り出される可能性があります.セマフォを扱っているので、x.wait() x.wait() ... x.wait() は、しばらく x.signal() なしで積み重なっていきますか? よくわかりません

if (次のカウント > 0) 信号 (次); x.wait() が山積みになるのを避けるためですか?プロセスが x.wait() または x.signal() のいずれかを呼び出すと想定していますが、なぜそれを正確に行うのかさえわかりません。

4

0 に答える 0