Ada Reference Manual (Ada 2022)Legal Information
Contents   Index   References   Search   Previous   Next 

9   Tasks and Synchronization

1/5
The execution of an Ada program consists of the execution of one or more tasks. Each task represents a separable activity that proceeds independently and concurrently between the points where it interacts with other tasks. A single task, when within the context of a parallel construct, can represent multiple logical threads of control which can proceed in parallel; in other contexts, each task represents one logical thread of control.
1.1/5
 The various forms of task interaction are described in this clause, and include:
2
the activation and termination of a task;
3
a call on a protected subprogram of a protected object, providing exclusive read-write access, or concurrent read-only access to shared data;
4
a call on an entry, either of another task, allowing for synchronous communication with that task, or of a protected object, allowing for asynchronous communication with one or more other tasks using that same protected object;
5
a timed operation, including a simple delay statement, a timed entry call or accept, or a timed asynchronous select statement (see next item);
6
an asynchronous transfer of control as part of an asynchronous select statement, where a task stops what it is doing and begins execution at a different point in response to the completion of an entry call or the expiration of a delay;
7
an abort statement, allowing one task to cause the termination of another task. 
8
In addition, tasks can communicate indirectly by reading and updating (unprotected) shared variables, presuming the access is properly synchronized through some other kind of task interaction.

Static Semantics

9
The properties of a task are defined by a corresponding task declaration and task_body, which together define a program unit called a task unit

Dynamic Semantics

10/5
Over time, tasks proceed through various states. A task is initially inactive; upon activation, and prior to its termination it is either blocked (as part of some task interaction) or ready to run. While ready, a task competes for the available execution resources that it requires to run. In the context of a parallel construct, a single task can utilize multiple processing resources simultaneously. 
11/5
NOTE   Concurrent task execution can be implemented on multicomputers, multiprocessors, or with interleaved execution on a single physical processor. On the other hand, whenever an implementation can determine that the required semantic effects can be achieved when parts of the execution of a single logical thread of control are performed by different physical processors acting in parallel, it can choose to perform them in this way.

Contents   Index   References   Search   Previous   Next 
Ada-Europe Ada 2005 and 2012 Editions sponsored in part by Ada-Europe