procedure SHOPPING is
task GET_SALAD;
task GET_WINE;
task GET_MEAT;
task body GET_SALAD is
begin
BUY_SALAD;
end GET_SALAD;
task body GET_WINE is
begin
BUY_WINE;
end GET_WINE;
task body GET_MEAT is
begin
BUY_MEAT;
end GET_MEAT;
begin
null;
end SHOPPING;
procedure SHOPPING is
task GET_SALAD is
entry PAY (M : in MONEY);
entry COLLECT (S : out SALAD);
end GET_SALAD;
task body GET_SALAD is
CASH : MONEY;
FOOD : SALAD;
begin
accept PAY (M : in MONEY) do
CASH := M;
end PAY;
FOOD := BUY_SALAD (CASH);
accept COLLECT (S : out SALAD) do
S := FOOD;
end COLLECT;
end GET_SALAD;
task PROTECTED_VARIABLE is
entry READ (X : out ITEM);
entry WRITE (X : in ITEM);
end;
task body PROTECTED_VARIABLE is
V : ITEM;
begin
accept WRITE (X : in ITEM) do
V := X;
end;
loop
select
accept READ( X : out ITEM) do
X := V;
end;
or
accept WRITE (X : in ITEM) do
V := X;
end;
end select;
end loop;
end PROTECTED_VARIABLE;
GUARDS
task BUFFERING is
entry PUT (X : in ITEM);
entry GET (X : out ITEM);
end;
task body BUFFERING is
N : constant := 8;
A : array (1..N) of ITEM;
I, J : integer range 1..N := 1;
COUNT : integer range 0..N := 0;
begin
loop
select
when COUNT < N =>
accept PUT (X : in ITEM) do
A(I) := X;
end;
I := I mod N + 1; COUNT := COUNT + 1;
or
when COUNT > 0 =>
accept GET (X : out ITEM) do
X := A(J);
end;
J := J mod N + 1; COUNT := COUNT - 1;
end select;
end loop;
end BUFFERING;
Copyright ©1998, G. Hill Price
Send comments to G. Hill Price