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

H.6 Pragma Partition_Elaboration_Policy

1/3
This subclause defines a pragma for user control over elaboration policy. 

Syntax

2/2
The form of a pragma Partition_Elaboration_Policy is as follows: 
3/2
  pragma Partition_Elaboration_Policy (policy_identifier);
4/2
The policy_identifier shall be either Sequential, Concurrent or an implementation-defined identifier.

Post-Compilation Rules

5/2
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.
6/3
If the Sequential policy is specified for a partition, then pragma Restrictions (No_Task_Hierarchy) shall also be specified for the partition. 

Dynamic Semantics

7/2
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.
8/2
If the partition elaboration policy is Sequential, then task activation and interrupt attachment are performed in the following sequence of steps:
9/2
The activation of all library-level tasks and the attachment of interrupt handlers are deferred until all library units are elaborated.
10/2
The interrupt handlers are attached by the environment task.
11/2
The environment task is suspended while the library-level tasks are activated.
12/2
The environment task executes the main subprogram (if any) concurrently with these executing tasks. 
13/2
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.
14/2
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

15/3
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

16/3
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. 
17/5
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. 

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