Skip to content

Instantly share code, notes, and snippets.

@mrnkr
Created December 3, 2018 00:49
Show Gist options
  • Select an option

  • Save mrnkr/35776c0e731f7e9dbc811924ea0f7d02 to your computer and use it in GitHub Desktop.

Select an option

Save mrnkr/35776c0e731f7e9dbc811924ea0f7d02 to your computer and use it in GitHub Desktop.
task Readers_Writers is
procedure Reader (Read: out Int);
entry Writer (Written: in Int);
entry Begin_Reading;
entry Finish_Reading;
end
procedure Reader (Read: out Int) is
begin
Begin_Reading;
Read := Shared;
Finish_Reading;
end
task body Readers_Writers is
Shared: Int;
Readers: Int := 0;
begin
accept Writer (Written: in Int) do
Shared := Written;
end
loop
select
when Writer'count = 0 accept Begin_Reading;
Readers := Readers + 1;
or
accept Finish_Reading;
Readers := Readers - 1;
or
when Readers = 0 accept Writer (Written: in Int) do
Shared := Written;
end
loop
select
accept Begin_Reading
Readers := Readers + 1;
else exit
end select
end loop
end select
end lopp
end Readers_Writers;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment