Producer and Consumer – Ada Rendezvous
procedure prod_cons_ada;
task buffer is
entry append(x: in integer);
entry remove(y: out integer);
end buffer;
task producer;
task consumer;
task
body buffer is
count : integer := 0 in :
integer := 0; out : integer := 0;
buff: array(0..n-1) of integer;
begin
loop
select
when count < n =>
accept
append(x : in integer) do
buff(in) := x;
end insert;
in := (in – 1) mod n; count :=
count + 1;
or
when count > 0 =>
accept remove(y : out integer)
do
y := buff(out);
end remove;
out := (out + 1) mod n; count :=
count – 1;
end select;
end loop;
end
buffer;
task body producer is task body consumer is
item : integer; item : integer;
begin begin
loop loop
generate item; buffer.remove(item);
buffer.append(item); use
item;
end loop; end loop;
end producer; end consumer;
begin -- main procedure executable code
null;
end
prod_cons_ada