Справочник по Ada 2005
H.6 Предикат Partition_Elaboration_Policy
Этот пункт определяет предикат для управления политикой разработки.
Синтаксис
Форма предиката Partition_Elaboration_Policy имеет следующий вид:
pragma Partition_Elaboration_Policy (policy_идентификатор);
policy_идентификатор должен быть либо Sequential, либо Concurrent, либо иметь значение, определённое реализацией.
Правила после компиляции
Предикат Partition_Elaboration_Policy является предикатом конфигурации. Он задаёт политику разработки для раздела. Для раздела должна быть задана не более одной политики разработки.
Если для раздела задана политика Sequential, то для раздела также должен быть задан предикат Restrictions (No_Task_Hierarchy).
Динамическая семантика
Несмотря на то, что этот международный стандарт гласит иное, этот предикат позволяет изменять правила разработки раздела, касающиеся активации задач и подключения обработчиков прерываний. Если policy_идентификатор равен Concurrent или если для раздела не определён предикат Partition_Elaboration_Policy, применяются правила, определённые в другом месте этого стандарта.
Если политика разработки раздела равна Sequential, то активация задач и подключение обработчиков прерываний выполняются в следующей последовательности:
- Активация всех задач на уровне библиотек и подключение обработчиков прерываний откладываются до разработки всех библиотек.
- Обработчики прерываний подключаются задачей среды.
- Задача среды приостанавливается, пока активируются задачи на уровне библиотек.
- Задача среды выполняет главную подпрограмму (если она есть) одновременно с этими выполняющимися задачами.
Если несколько отложенных подключений обработчиков динамических прерываний для одного и того же прерывания, то обработчик, который подключается последним вызовом Attach_Handler или Exchange_Handler, и будет подключён.
Если какая-либо отложенная активация задачи терпит неудачу, в начале последовательности операторов тела задачи среды до вызова главной подпрограммы возникает Tasking_Error.
Рекомендации по реализации
Если политика разработки раздела равна Sequential, и задача среды блокируется постоянно во время разработки, то раздел находится в тупике, и рекомендуется немедленно завершить раздел.
Разрешения на реализацию
Если политика разработки раздела равна Sequential, и какая-либо активация задачи терпит неудачу, реализация может немедленно завершить активный раздел, чтобы уменьшить риск продолжения выполнения с подмножеством активных задач.
ПРИМЕЧАНИЯ
12 Если какая-либо отложенная активация задачи терпит неудачу, задача среды не может обработать исключение Tasking_Error и завершается немедленно. В отличие от этого, если политика разработки раздела равна Concurrent, то это исключение можно обработать в единице библиотеки.