1
The following language−defined library package exists:
2/2
{00362AI95−00362−01} package Ada.Task_Identification is pragma Preelaborate(Task_Identification); type Task_Id is private; pragma Preelaborable_Initialization (Task_Id); Null_Task_Id : constant Task_Id; function "=" (Left, Right : Task_Id) return Boolean;
3/1
{8652/00708652/0070} {00101AI95−00101−01} function Image (T : Task_Id) return String; function Current_Task return Task_Id; procedure Abort_Task (T : in Task_Id);
4
function Is_Terminated(T : Task_Id) return Boolean; function Is_Callable (T : Task_Id) return Boolean; private ... −− not specified by the language end Ada.Task_Identification;
5
A value of the type Task_Id identifies an existent task. The constant Null_Task_Id does not identify any task. Each object of the type Task_Id is default initialized to the value of Null_Task_Id.
6
The function "=" returns True if and only if Left and Right identify the same task or both have the value Null_Task_Id.
7
The function Image returns an implementation−defined string that identifies T. If T equals Null_Task_Id, Image returns an empty string.
7.a
Implementation defined: The result of the Task_Identification.Image attribute.
8
The function Current_Task returns a value that identifies the calling task.
9
The effect of Abort_Task is the same as the abort_statement for the task identified by T. [In addition, if T identifies the environment task, the entire partition is aborted, See E.1.]
10
The functions Is_Terminated and Is_Callable return the value of the corresponding attribute of the task identified by T.
10.a.1/1
Ramification: {8652/01158652/0115} {00206AI95−00206−01} These routines can be called with an argument identifying the environment task. Is_Terminated will always be False for such a call, but Is_Callable (usually True) could be False if the environment task is waiting for the termination of dependent tasks. Thus, a dependent task can use Is_Callable to determine if the main subprogram has completed.
11
For a prefix T that is of a task type [(after any implicit dereference)], the following attribute is defined:
12
T'Identity
Yields a value of the type Task_Id that identifies the task denoted by T.
13
For a prefix E that denotes an entry_declaration, the following attribute is defined:
14
E'Caller
Yields a value of the type Task_Id that identifies the task whose call is now being serviced. Use of this attribute is allowed only inside an entry_body or accept_statement corresponding to the entry_declaration denoted by E.
15
{Program_Error (raised by failure of run−time check)} Program_Error is raised if a value of Null_Task_Id is passed as a parameter to Abort_Task, Is_Terminated, and Is_Callable.
16
{potentially blocking operation (Abort_Task) [partial]} {blocking, potentially (Abort_Task) [partial]} Abort_Task is a potentially blocking operation (see 9.5.1).
17/2
{00237AI95−00237−01} {bounded error (cause) [partial]} It is a bounded error to call the Current_Task function from an entry body, interrupt handler, or finalization of a task attribute. {Program_Error (raised by failure of run−time check)} Program_Error is raised, or an implementation−defined value of the type Task_Id is returned.
17.a/2
Implementation defined: The value of Current_Task when in a protected entry, interrupt handler, or finalization of a task attribute.
17.b
Implementation Note: This value could be Null_Task_Id, or the ID of some user task, or that of an internal task created by the implementation.
17.c/2
Ramification: {00237AI95−00237−01} An entry barrier is syntactically part of an entry_body, so a call to Current_Task from an entry barrier is also covered by this rule.
18
{erroneous execution (cause) [partial]} If a value of Task_Id is passed as a parameter to any of the operations declared in this package (or any language−defined child of this package), and the corresponding task object no longer exists, the execution of the program is erroneous.
19
The implementation shall document the effect of calling Current_Task from an entry body or interrupt handler.
19.a/2
This paragraph was deleted.
19.b/2
Documentation Requirement: The effect of calling Current_Task from an entry body or interrupt handler.
NOTES
20
10 This package is intended for use in writing user−defined task scheduling packages and constructing server tasks. Current_Task can be used in conjunction with other operations requiring a task as an argument such as Set_Priority (see D.5).
21
11 The function Current_Task and the attribute Caller can return a Task_Id value that identifies the environment task.
21.a/2
{00362AI95−00362−01} Task_Identification is now preelaborated, so it can be used in preelaborated units.
21.b/2
{8652/00708652/0070} {00101AI95−00101−01} Corrigendum: Corrected the mode of the parameter to Abort_Task to in.
21.c/2
{00237AI95−00237−01} Corrected the wording to include finalization of a task attribute in the bounded error case; we don't want to specify which task does these operations.