geweckt. Der folgende Code stammt von Wiki.Andere Prozesse werden nicht mit Semaphor
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);
}
}
Was passiert, wenn ich mehr als 2 Prozess haben, während die Kapazität 1 (s
wird auf 1 initialisiert)? Zum Beispiel tritt Prozess 1 in die kritische Sitzung ein. Dann rufen Prozess 2 und 3 wait
auf. s
entspricht -2 jetzt. Dann beendet der Prozess 1 und ruft signal
auf. s
wird -1. Da s >= 0
nicht zufrieden stellend ist, würden die Prozesse 2 und 3 niemals aufgeweckt werden. Was ist das Problem hier?
Der Code falsch ist, muss es 'if (s <= 0) {Wakeup (p)} sein' – yakout