OSDN Git Service

Delete all lines containing "$Revision:".
[pf3gnuchains/gcc-fork.git] / gcc / ada / g-thread.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT RUNTIME COMPONENTS                          --
4 --                                                                          --
5 --                         G N A T . T H R E A D S                          --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --                                                                          --
10 --            Copyright (C) 1998-2000 Ada Core Technologies, Inc.           --
11 --                                                                          --
12 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
13 -- terms of the  GNU General Public License as published  by the Free Soft- --
14 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
15 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
16 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
17 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
18 -- for  more details.  You should have  received  a copy of the GNU General --
19 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
20 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
21 -- MA 02111-1307, USA.                                                      --
22 --                                                                          --
23 -- As a special exception,  if other files  instantiate  generics from this --
24 -- unit, or you link  this unit with other files  to produce an executable, --
25 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
26 -- covered  by the  GNU  General  Public  License.  This exception does not --
27 -- however invalidate  any other reasons why  the executable file  might be --
28 -- covered by the  GNU Public License.                                      --
29 --                                                                          --
30 -- GNAT is maintained by Ada Core Technologies Inc (http://www.gnat.com).   --
31 --                                                                          --
32 ------------------------------------------------------------------------------
33
34 with Ada.Task_Identification; use Ada.Task_Identification;
35 with System.Task_Primitives.Operations;
36 with System.Tasking;
37 with System.OS_Interface;
38 with Unchecked_Conversion;
39
40 package body GNAT.Threads is
41
42    use System;
43
44    function To_Addr is new Unchecked_Conversion (Task_Id, Address);
45    function To_Id   is new Unchecked_Conversion (Address, Task_Id);
46    function To_Id   is new Unchecked_Conversion (Address, Tasking.Task_ID);
47
48    type Code_Proc is access procedure (Id : Address; Parm : Void_Ptr);
49
50    task type Thread
51      (Stsz : Natural;
52       Prio : Any_Priority;
53       Parm : Void_Ptr;
54       Code : Code_Proc)
55    is
56       pragma Priority (Prio);
57       pragma Storage_Size (Stsz);
58    end Thread;
59
60    task body Thread is
61    begin
62       Code.all (To_Addr (Current_Task), Parm);
63    end Thread;
64
65    type Tptr is access Thread;
66
67    -------------------
68    -- Create_Thread --
69    -------------------
70
71    function Create_Thread
72      (Code : Address;
73       Parm : Void_Ptr;
74       Size : Natural;
75       Prio : Integer) return System.Address
76    is
77       TP : Tptr;
78
79       function To_CP is new Unchecked_Conversion (Address, Code_Proc);
80
81    begin
82       TP := new Thread (Size, Prio, Parm, To_CP (Code));
83       return To_Addr (TP'Identity);
84    end Create_Thread;
85
86    --------------------
87    -- Destroy_Thread --
88    --------------------
89
90    procedure Destroy_Thread (Id : Address) is
91       Tid : Task_Id := To_Id (Id);
92
93    begin
94       Abort_Task (Tid);
95    end Destroy_Thread;
96
97    ----------------
98    -- Get_Thread --
99    ----------------
100
101    procedure Get_Thread (Id : Address; Thread : Address) is
102       use System.OS_Interface;
103
104       Thr : Thread_Id;
105       for Thr use at Thread;
106    begin
107       Thr := Task_Primitives.Operations.Get_Thread_Id (To_Id (Id));
108    end Get_Thread;
109
110 end GNAT.Threads;