with Stringpack; use Stringpack;
procedure Shared_Demo1 is

N: Integer :=0; --shared variable
Anz: Positive := 1_000_000;

task Up;
task body Up is
   My_N: Integer;
begin
   for I in 1..Anz loop
      My_N := N;        -- -+
      My_N := My_N+1;   --  | Kritischer Abschnitt: Zugriff auf n
      N := My_N;        -- -+
   end loop;
end Up;

task Down;
task body Down is
   My_N: Integer;
begin
   for I in 1..Anz loop
      My_N := N;        -- -+
      My_N := My_N-1;   --  | Kritischer Abschnitt
      N := My_N;        -- -+
   end loop;
end Down;

begin
   while not(Up'Terminated and Down'Terminated) loop
      null;
   end loop; -- sehr schlechter Stil !!!!!!!!!!!!!!!

   Print("n= " & N);
end Shared_Demo1;

