---------------------------------
-- D. Mathieu                  --
--                             --
-- fichier Essai02.adb         --
--                             --
-- créé le 13/12/98            --
--                             --
---------------------------------
--
with Ada.Text_Io;
use  Ada.Text_Io;

-- Programme destiné à montrer que des commutations de tâches peuvent
-- se produire à n'importe quel moment. Il faut maintenant
--          Maxi : constant := 10_000_000;
-- pour voir apparaître le phénomène. Deux exécutions successives :

-- Valeur initiale de Partage = 0
-- Valeur finale   de Partage = -1360466

-- Valeur initiale de Partage = 0
-- Valeur finale   de Partage = 2080775
 

-- La tâche principale n'est plus en cause

procedure Essai02 is

    Maxi : constant := 10_000_000;
    subtype T_Entier is Integer range -Maxi..Maxi;
 
    package P_ENTIER is new ADA.TEXT_IO.INTEGER_IO (T_Entier);
    use P_ENTIER;
 
    Partage : T_Entier  := 0;
 
begin -- Essai02

    Put ("Valeur initiale de Partage = ");
    Put (Partage);
    New_Line;
 
    declare
        task TskIncrement;
        task TskDecrement;

        task body TskIncrement is

        begin -- Increment
            for I in 1..T_Entier'Last  loop
                Partage := Partage + 1;
            end loop;

        end TskIncrement;

        task body TskDecrement is

        begin -- TskDecrement
            for I in 1..T_Entier'Last  loop
                Partage := Partage - 1;
            end loop;

        end TskDecrement;
    begin
        null;
    end;
    Put ("Valeur finale   de Partage = ");
    Put (Partage);
    New_Line;
 
end Essai02;