-- 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;