----------------------------------------------------------------------
-- Readers-Writers Demo, mit simpler integer-Variablen
--
-- Version 1: protected object, => no preference for writer,
--                                 no potentially blocking ops
----------------------------------------------------------------------

with Stringpack; use Stringpack;
procedure Readers_Writers1 is

protected Variable is
   procedure Write (X : Integer);
   function Read return Integer;
private 
   V : Integer := 0; -- na ja
end Variable;

protected body Variable is
   procedure Write (X : Integer) is
      begin V := X; end Write;
   function Read return Integer is
      begin return V; end Read;
end Variable;

task type Reader;
task body Reader is
      Local_X : Integer;
   begin
      for I in 1..100000 loop
           Local_X := Variable.Read;
      end loop;
      Print("> " & Local_X);
end Reader;

task type Writer;
task body Writer is
      Local_X : Integer := 1;
   begin
      for I in 1..100000 loop
           Variable.Write(Local_X);
           Local_X := Local_X + 1;
      end loop;
end Writer;

Anz_R, Anz_W : Natural;

begin

   Print("give #readers, #writers"); 
   Anz_R := Getint; Anz_W := Getint;
   declare
       R : array(1..Anz_R) of Reader;
       W : array(1..Anz_W) of Writer;
   begin null; end;

end Readers_Writers1;
