1 |
apollock |
1.1 |
with Ada.Text_IO; use Ada.Text_IO; |
2 |
|
|
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; |
3 |
|
|
with Protected_Shared_Natural; use Protected_Shared_Natural; |
4 |
|
|
procedure mutual is |
5 |
|
|
Number_Of_Children : constant Positive := 4; |
6 |
|
|
task type Next_Task(Id : Natural) is |
7 |
|
|
entry Start; |
8 |
|
|
entry Stop; |
9 |
|
|
end Next_Task; |
10 |
|
|
type Next_Task_Ptr is access Next_Task; |
11 |
|
|
My_Task_Array : array(Integer range 0..Number_Of_Children-1) of Next_Task_Ptr; |
12 |
|
|
My_Data : Shared_Natural(42); |
13 |
|
|
|
14 |
|
|
task body Next_Task is |
15 |
|
|
Local_Value : Natural; |
16 |
|
|
begin |
17 |
|
|
accept Start do |
18 |
|
|
null; |
19 |
|
|
end Start; |
20 |
|
|
for I in 1..10 loop |
21 |
|
|
My_Data.Increment(Id); |
22 |
|
|
delay 0.0; |
23 |
|
|
end loop; |
24 |
|
|
--Local_Value := My_Data.Read; |
25 |
|
|
My_Data.Read(Local_Value); |
26 |
|
|
Put("Final Value on Task "); Put(Local_Value); Put( Id); New_Line; |
27 |
|
|
accept Stop do |
28 |
|
|
null; |
29 |
|
|
end Stop; |
30 |
|
|
end Next_Task; |
31 |
|
|
|
32 |
|
|
Value : Natural; |
33 |
|
|
begin |
34 |
|
|
for I in My_Task_Array'Range loop |
35 |
|
|
My_Task_Array(I) := new Next_Task(I); |
36 |
|
|
end loop; |
37 |
|
|
--Value := My_Data.Read; |
38 |
|
|
My_Data.Read(Value); |
39 |
|
|
Put("Initial Value on Master ");Put(Value);New_Line; |
40 |
|
|
for I in My_Task_Array'Range loop |
41 |
|
|
My_Task_Array(I).Start; |
42 |
|
|
end loop; |
43 |
|
|
for I in My_Task_Array'Range loop |
44 |
|
|
My_Task_Array(I).Stop; |
45 |
|
|
end loop; |
46 |
|
|
--Value := My_Data.Read; |
47 |
|
|
My_Data.Read(Value); |
48 |
|
|
Put("Final Value on Master ");Put(Value);New_Line; |
49 |
|
|
Value := My_Data.ReadCount; |
50 |
|
|
Put("Number of reads "); Put(Value); New_Line; |
51 |
|
|
end mutual; |