H.6 Pragma Partition_Elaboration_Policy
shall be either Sequential, Concurrent or an implementation-defined identifier.
allowed in a pragma
Note that the Ravenscar
profile (see D.13
) has nothing to say about
which Partition_Elaboration_Policy is used. This was intentionally omitted
from the profile, as there was no agreement as to whether the Sequential
policy should be required for Ravenscar programs. As such it was defined
Partition_Elaboration_Policy is a configuration pragma. It specifies
the elaboration policy for a partition. At most one elaboration policy
shall be specified for a partition.
If the Sequential policy is specified for a partition, then pragma Restrictions
(No_Task_Hierarchy) shall also be specified for the partition.
what this International Standard
says elsewhere, this pragma
allows partition elaboration rules concerning task activation and interrupt
attachment to be changed. If the policy_identifier
is Concurrent, or if there is no pragma Partition_Elaboration_Policy
defined for the partition, then the rules defined elsewhere in this Standard
If the partition elaboration policy is Sequential, then task activation
and interrupt attachment are performed in the following sequence of steps:
The activation of all library-level tasks and the
attachment of interrupt handlers are deferred until all library units
The interrupt handlers are attached by the environment
The environment task is suspended while the library-level
tasks are activated.
The environment task executes the main subprogram
(if any) concurrently with these executing tasks.
If several dynamic interrupt handler attachments for the same interrupt
are deferred, then the most recent call of Attach_Handler or Exchange_Handler
determines which handler is attached.
If any deferred task activation fails, Tasking_Error is raised at the
beginning of the sequence of statements of the body of the environment
task prior to calling the main subprogram.
If the partition elaboration policy is Sequential and the Environment
task becomes permanently blocked during elaboration, then the partition
is deadlocked and it is recommended that the partition be immediately
Implementation Advice: If the partition
elaboration policy is Sequential and the Environment task becomes permanently
blocked during elaboration, then the partition should be immediately
If the partition elaboration policy is Sequential and any task activation
fails, then an implementation may immediately terminate the active partition
to mitigate the hazard posed by continuing to execute with a subset of
the tasks being active.
If any deferred task activation fails, the environment task is unable
to handle the Tasking_Error exception and completes immediately. By contrast,
if the partition elaboration policy is Concurrent, then this exception
could be handled within a library unit.
Extensions to Ada 95
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe