9 Tasks and Synchronization

{AI05-0299-1}
The execution of an Ada program consists of the execution
of one or more tasks. Each
task represents a separate thread of control that proceeds independently
and concurrently between the points where it interacts with other
tasks. The various forms of task interaction are described in this clause section,
and include:

To be honest: The execution of an Ada
program consists of the execution of one or more partitions (see 10.2),
each of which in turn consists of the execution of an environment task
and zero or more subtasks.

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;

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;

Static Semantics

Dynamic Semantics

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.

Discussion: {AI05-0229-1}
The means for selecting which
of the ready tasks to run, given the currently available execution resources,
is determined by the task dispatching policy in effect, which
is generally implementation defined, but may be controlled by aspects,
pragmas, and operations defined in
the Real-Time Annex (see D.2 and D.5).

1 Concurrent task execution may 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 given task are performed by different physical
processors acting in parallel, it may choose to perform them in this
way.

Wording Changes from Ada 83

We use the term "concurrent" rather
than "parallel" when talking about logically independent execution
of threads of control. The term "parallel" is reserved for
referring to the situation where multiple physical processors run simultaneously.