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) then 
rwc++; read.wait; rwc--;
rc++;
read.signal;

ReadExit()
rc--; if rc=0 then write.signal

WriteEntry()
if not (rc=0 and wc=0) then 
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]);