C.7.1 The Package Task_Identification
Static Semantics
The following language-defined
library package exists:
{
AI95-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;
{
8652/0070}
{
AI95-00101-01}
function Image (T : Task_Id)
return String;
function Current_Task
return Task_Id;
procedure Abort_Task (T :
in Task_Id);
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;
Dynamic Semantics
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.
The function "=" returns True if and only
if Left and Right identify the same task or both have the value Null_Task_Id.
The function Image returns an implementation-defined
string that identifies T. If T equals Null_Task_Id, Image returns an
empty string.
Implementation defined: The result of
the Task_Identification.Image attribute.
The function Current_Task returns a value that identifies
the calling task.
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.]
The functions Is_Terminated and Is_Callable return
the value of the corresponding attribute of the task identified by T.
Ramification: {
8652/0115}
{
AI95-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.
For a
prefix
T that is of a task type [(after any implicit dereference)], the following
attribute is defined:
T'Identity
Yields a value of the type Task_Id
that identifies the task denoted by T.
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.
{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.
{potentially blocking
operation (Abort_Task) [partial]} {blocking,
potentially (Abort_Task) [partial]} Abort_Task
is a potentially blocking operation (see
9.5.1).
Bounded (Run-Time) Errors
{
AI95-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.
Implementation defined: The value of
Current_Task when in a protected entry, interrupt handler, or finalization
of a task attribute.
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.
Ramification: {
AI95-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.
Erroneous Execution
{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.
Documentation Requirements
The implementation shall document the effect of calling
Current_Task from an entry body or interrupt handler.
This paragraph
was deleted.
Documentation Requirement: The effect
of calling Current_Task from an entry body or interrupt handler.
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).
11 The function Current_Task and the attribute
Caller can return a Task_Id value that identifies the environment task.
Extensions to Ada 95
{
AI95-00362-01}
Task_Identification is now preelaborated, so it can be used in preelaborated
units.
Wording Changes from Ada 95
{
AI95-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.