with Text_IO; procedure Prod is package Int_IO is new Text_IO.Integer_IO(integer); --- Here are the functions computing the --- two factors... function ComputeFirstNumber return integer is begin --- ... return 10; end; function ComputeSecondNumber return Integer is begin --- ... return 11; end; --- Task for first number computation! --- task FirstTask is entry Start; entry GetResult(O: out integer); end FirstTask; task body FirstTask is Num:Integer; begin accept Start; Num := ComputeFirstNumber; accept GetResult(O: out Integer) do GetResult.O := Num; end; end; --- Task for second number computation! --- task SecondTask is entry Start; entry GetResult(O: out integer); end SecondTask; task body SecondTask is Num:Integer; begin accept Start; Num := ComputeSecondNumber; accept GetResult(O: out Integer) do GetResult.O := Num; end; end; --- Task for product computation --- task ProductTask is entry Start; entry GetResult(O: out Integer); end ProductTask; task body ProductTask is P, Num:Integer; begin --- wait for main program --- to call ``entry start'' accept Start; --- start tasks --- FirstTask.Start; SecondTask.Start; --- get first result --- FirstTask.GetResult(Num); P := Num; --- get second result --- SecondTask.GetResult(Num); P := P * Num; --- wait for main program --- to retrieve the result accept GetResult(O: out Integer) do GetResult.O := P; end; end ProductTask; O:Integer; begin ProductTask.Start; ProductTask.GetResult(O); Int_IO.put(O); end Prod;