Producer and Consumer – Monitor Example
program
prod_cons_mon;
monitor buffer;
var count, in, out: integer;
buf: array[0..n-1] of integer;
full, empty: condition;
procedure append(x: integer); procedure remove(var y:
integer);
begin begin
if count > n then WAIT(full); if count = 0 then
WAIT(empty);
buff[in] := x; y :=
buff[out];
in := (in + 1) mod n; out := (out + 1)
mod n;
count := count + 1; count := count
– 1;
SIGNAL(empty); SIGNAL(full);
end; end;
begin {monitor executable code}
count := 0;
in := 0;
out := 0;
end;
procedure producer; procedure consumer;
var item: integer; var item:
integer;
while true do while true do
begin begin
generate item; buffer.remove(item);
buffer.append(item); use item;
end; end;
begin
{main program}
cobegin
producer;
consumer;
coend;
end.