____ | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

9.1 Task Units and Task Objects

A task unit is declared by a task declaration, which has a corresponding task_body. A task declaration may be a task_type_declaration, in which case it declares a named task type; alternatively, it may be a single_task_declaration, in which case it defines an anonymous task type, as well as declaring a named task object of that type.
       task_type_declaration ::=
          task type defining_identifier [known_discriminant_part] [is task_definition];
       single_task_declaration ::=
          task defining_identifier [is task_definition];
       task_definition ::=
         [ private
         end [task_identifier]
       task_item ::= entry_declaration | representation_clause
       task_body ::=
          task body defining_identifier is
          end [task_identifier];
Legality Rules
A task declaration requires a completion, which shall be a task_body, and every task_body shall be the completion of some task declaration.
Static Semantics
A task_definition defines a task type and its first subtype. The first list of task_items of a task_definition, together with the known_discriminant_part, if any, is called the visible part of the task unit. The optional list of task_items after the reserved word private is called the private part of the task unit.
Dynamic Semantics
The elaboration of a task declaration elaborates the task_definition. The elaboration of a single_task_declaration also creates an object of an (anonymous) task type.
The elaboration of a task_definition creates the task type and its first subtype; it also includes the elaboration of the entry_declarations in the given order.
As part of the initialization of a task object, any representation_clauses and any per-object constraints associated with entry_declarations of the corresponding task_definition are elaborated in the given order.
The elaboration of a task_body has no effect other than to establish that tasks of the type can from then on be activated without failing the Elaboration_Check.
The execution of a task_body is invoked by the activation of a task of the corresponding type (see 9.2).
The content of a task object of a given task type includes:

Examples of declarations of task types:
       task type Server is
          entry Next_Work_Item(WI : in Work_Item);
          entry Shut_Down;
       end Server;
       task type Keyboard_Driver(ID : Keyboard_ID := New_ID) is
          entry Read (C : out Character);
          entry Write(C : in  Character);
       end Keyboard_Driver;
Examples of declarations of single tasks:
       task Controller is
          entry Request(Level)(D : Item);  --  a family of entries
       end Controller;
       task Parser is
          entry Next_Lexeme(L : in  Lexical_Element);
          entry Next_Action(A : out Parser_Action);
       task User;  --  has no entries
Examples of task objects:
       Agent    : Server;
       Teletype : Keyboard_Driver(TTY_ID);
       Pool     : array(1 .. 10) of Keyboard_Driver;
Example of access type designating task objects:
       type Keyboard is access Keyboard_Driver;
       Terminal : Keyboard := new Keyboard_Driver(Term_ID);

____ | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

Ada WWW Home -- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12