次のコードはWikiです。他のプロセスはセマフォを使用して起動しません
wait(Semaphore s){
s=s-1;
if (s<0) {
// add process to queue
block();
}
}
signal(Semaphore s){
s=s+1;
if (s>=0) {
// remove process p from queue
wakeup(p);
}
}
何容量は1(s
が1に初期化される)である間、私は2つの以上のプロセスを持っている場合は?たとえば、プロセス1は重要なセッションに入ります。その後、プロセス2および3はwait
を呼び出します。 s
は-2となります。次にプロセス1が終了し、signal
を呼び出します。 s
は-1になります。 s >= 0
が満たされないため、プロセス2および3は決して目を覚まされません。ここで何が問題なの?本はリンクのwikiとは対照的に、
コードが間違っている、それは 'する必要がある場合(S <= 0){ウェイクアップ(P)}' – yakout