with Ada.Text_IO; use Ada.Text_IO; with Ada.Task_Identification; procedure Main is Ct_Nb_TOp : constant := 100000000; Ct_Nb_Tack : constant := 10; Ct_Nb_Op : constant := Ct_Nb_TOp/Ct_Nb_Tack; pragma PRIORITY (1); task type Task_A is entry Init_A( Val : in integer ); entry End_A ( S : in out Long_Float ); end Task_A; task body Task_A is VA : integer := 0; Sum : Long_Float := 0.0 ; begin accept Init_A( Val : in integer ) do VA:=Val; Put_line("Init_A " & VA'Img); end Init_A; Put_line("Do_A" & VA'Img); for I in VA .. VA+ (Ct_Nb_Op-1) loop Sum := Sum + 1.0/(Long_Float(I)*Long_Float(I)); end loop; accept End_A (S : in out Long_Float ) do S:=Sum+S; Put_line("End_A" & VA'Img); end End_A; end Task_A; A_Array : array (0.. Ct_Nb_Tack) of Task_A; Global_Sum : Long_Float := 0.0 ; begin Put_line("Main"); for I in 0 .. Ct_Nb_Tack loop Put_line(" " & Ada.Task_Identification.Image(A_Array(I)'Identity)); A_Array(I).Init_A(I*Ct_Nb_Op+1); end loop; for I in reverse 0 .. Ct_Nb_Tack loop A_Array(I).End_A(Global_Sum); Put_line("End_A from main" & Global_Sum'Img); end loop; end Main;