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

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