DocAda(tm) is a productivity tool of KSCE

____ | Up | Next | Back | Forward
About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News

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.

Syntax

   
       task_type_declaration ::=
          task type defining_identifier [known_discriminant_part] [is task_definition];

       single_task_declaration ::=
          task defining_identifier [is task_definition];

       task_definition ::=
            {task_item}
         [ private
            {task_item}]
         end [task_identifier]

       task_item ::= entry_declaration | representation_clause

       task_body ::=
          task body defining_identifier is
            declarative_part
          begin
            handled_sequence_of_statements
          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

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);
       end;

       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);

About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News
____ | Up | Next | Back | Forward


Copyright © 1994-1997 by Kempe Software Capital Enterprises. All Rights Reserved. For comments on this DocAda(tm) hypertext document, please write to KSCE, at docada@ksce.com