Skip to content

Instantly share code, notes, and snippets.

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

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

Select an option

Save mrnkr/a885cf8b7e4191f0ca333178435cf2fb 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
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;
end select
end loop
end Readers_Writers;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment