Bounded Buffer
produce(item)
begin
if num=N then prod.wait;
num++; add item to buffer;
cons.signal;
end;
consume(item);
begin
if num=0 then cons.wait;
num--; get item from buffer;
prod.signal;
end
Reader-Writer (CORRECT)
ReadEntry()
if not (wc=0 and wwc=0) {
rwc++; read.wait; rwc--;
}
rc++;
read.signal;
ReadExit()
rc--; if rc=0 then write.signal
WriteEntry()
if not (rc=0 and wc=0) {
wwc++; write.wait; wwc--
}
wc++;
WriteExit()
wc--;
if rwc>0 the read.signal else write.signal
Dining Philosopher. No deadlock, but starvation
pickup(I)
while not chp[left] and chp[right] do
self[I].wait
chp[left] := false; chp[right] := false;
putdown(I)
chp[left]:=true; signal(self[left]);
chp[right]:=true; signal(self[right]);