1-- Copyright 2009-2013 Free Software Foundation, Inc. 2-- 3-- This program is free software; you can redistribute it and/or modify 4-- it under the terms of the GNU General Public License as published by 5-- the Free Software Foundation; either version 3 of the License, or 6-- (at your option) any later version. 7-- 8-- This program is distributed in the hope that it will be useful, 9-- but WITHOUT ANY WARRANTY; without even the implied warranty of 10-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11-- GNU General Public License for more details. 12-- 13-- You should have received a copy of the GNU General Public License 14-- along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16procedure Foo is 17 18 task type Caller is 19 entry Initialize; 20 entry Call_Break_Me; 21 entry Finalize; 22 end Caller; 23 type Caller_Ptr is access Caller; 24 25 procedure Break_Me is 26 begin 27 null; 28 end Break_Me; 29 30 task body Caller is 31 begin 32 accept Initialize do 33 null; 34 end Initialize; 35 accept Call_Break_Me do 36 Break_Me; 37 end Call_Break_Me; 38 accept Finalize do 39 null; 40 end Finalize; 41 end Caller; 42 43 Task_List : array (1 .. 3) of Caller_Ptr; 44 45begin 46 47 -- Start all our tasks, and call the "Initialize" entry to make 48 -- sure all of them have now been started. We call that entry 49 -- immediately after having created the task in order to make sure 50 -- that we wait for that task to be created before we try to create 51 -- another one. That way, we know that the order in our Task_List 52 -- corresponds to the order in the GNAT runtime. 53 for J in Task_List'Range loop 54 Task_List (J) := new Caller; 55 Task_List (J).Initialize; 56 end loop; 57 58 -- Next, call their Call_Break_Me entry of each task, using the same 59 -- order as the order used to create them. 60 for J in Task_List'Range loop -- STOP_HERE 61 Task_List (J).Call_Break_Me; 62 end loop; 63 64 -- And finally, let all the tasks die... 65 for J in Task_List'Range loop 66 Task_List (J).Finalize; 67 end loop; 68end Foo; 69