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