H.6 Pragma Partition_Elaboration_Policy
This subclause defines a
pragma
for user control over elaboration policy.
Syntax
The form of a
pragma
Partition_Elaboration_Policy is as follows:
pragma Partition_Elaboration_Policy
(
policy_identifier);
The
policy_identifier
shall be either Sequential, Concurrent or an implementation-defined identifier.
Post-Compilation Rules
A
pragma
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.
Dynamic Semantics
Notwithstanding
what this document
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 Reference
Manual apply.
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
are elaborated.
The interrupt handlers are attached by the environment
task.
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.
Implementation Advice
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 terminated.
Implementation Permissions
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.
NOTE 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 can be handled within a library
unit.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe