Spec-Zone.ru › Ada 2012
Справочник Ada 2012

9.3 Зависимость задач — завершение задач

Динамическая семантика

Каждая задача (кроме задачи окружения — см. 10.2) зависит от одного или нескольких мастеров (см. 7.6.1), следующим образом:
  • Если задача создана вычислением распределителя для заданного именованного типа доступа, она зависит от каждого мастера, включающего разработку объявления конечного предка заданного типа доступа.
  • Если задача создана разработкой объявления_объекта, она зависит от каждого мастера, включающего эту разработку.
  • В противном случае, задача зависит от мастера внешнего объекта, частью которого она является (как определяется уровнем доступности этого объекта — см. 3.10.2 и 7.6.1), а также от любого мастера, чьё выполнение включает выполнение мастера внешнего объекта.
Кроме того, если задача зависит от данного мастера, она определяется как зависящая от задачи, выполняющей мастера, и (рекурсивно) от любого мастера этой задачи.
Задача считается завершенной, когда выполнение соответствующего тела_задачи завершено. Задача считается завершённой, когда выполнено любое окончание тела_задачи (см. 7.6.1). Первым шагом завершения мастера (включая тело_задачи) является ожидание завершения любых задач, зависящих от мастера. Задача, выполняющая мастера, блокируется до тех пор, пока все зависимые задачи не завершатся. Затем выполняется любое оставшееся окончание, и мастер завершается.
Завершение задачи (и соответствующего тела_задачи) может произойти, когда задача заблокирована в выражении_выбора с открытым вариантом_завершения (см. 9.7.1); открытый вариант_завершения выбирается только в том случае, если выполнены следующие условия:
  • Задача зависит от завершенного мастера; и
  • Каждая задача, зависящая от рассмотренного мастера, либо уже завершена, либо аналогично заблокирована в выражении_выбора с открытым вариантом_завершения.
Когда оба условия выполнены, рассматриваемая задача завершается вместе со всеми задачами, зависящими от рассмотренного мастера, которые ещё не завершены.
ПРИМЕЧАНИЯ
8 Полный вид ограниченного частного типа может быть типом задачи или может иметь подкомпоненты типа задачи. Создание объекта такого типа создаёт зависимости в соответствии с полным типом.
9 объявление_переименования_объекта определяет новый вид существующего сущности и, следовательно, не создаёт дальнейшей зависимости.
10 Правила коллективного завершения группы задач, все заблокированные в выражениях_выбора с открытыми вариантами_завершения гарантируют, что коллективное завершение может произойти только тогда, когда нет оставшихся активных задач, которые могли бы вызвать одну из задач, которые коллективно завершаются.
11 Если две или более задачи заблокированы в выражениях_выбора с открытыми вариантами_завершения и коллективно завершаются, их действия завершения выполняются одновременно.
12 Завершение задачи может произойти по любой из следующих причин:
возникновение исключения во время разработки декларативной_части соответствующего тела_задачи;
завершение обработанной_последовательности_выражений соответствующего тела_задачи;
выбор открытого варианта_завершения выражения_выбора в соответствующем теле_задачи;
прерывание задачи.

Примеры

Пример зависимости задач:
declare
type Global is access Server; -- см. 9.1
A, B : Server;
G : Global;
begin
-- активация A и B
declare
type Local is access Server;
X : Global := new Server; -- активация X.all
L : Local := new Server; -- активация L.all
C : Server;
begin
-- активация C
G := X; -- как G, так и X обозначают один и тот же объект задачи
...
end; -- ожидание завершения C и L.all (но не X.all)
...
end; -- ожидание завершения A, B и G.all


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API