Справочное руководство по языку Ада-83

Операторы прекращения


Оператор прекращения переводит одну или несколько задач в

аварийное

состояние, предотвращая любые дальнейшие рандеву с такими задачами.

оператор-прекращения ::= abort имя-задачи {, имя-задачи};

При определении типа имени каждой задачи используется тот факт, что это задачный тип.

При выполнении оператора прекращения заданные имена задач вычисляются в порядке, который в языке не определен. Затем каждая упомянутая задача становится аварийной, если она еще не завершена; аналогично любая зависящая от упомянутой задача становится также аварийной, если она еще не завершена.

Любая аварийная задача, выполнение которой приостановлено операторами принятия, отбора или задержки, становится законченной. Любая аварийная задача, выполнение которой приостановлено при вызове входа, а соответствующее рандеву еше не началось, становится законченной и удаляется из очереди к входу. Любая аварийная задача, которая не начала свою активизацию, становится законченной (и, следовательно, завершенной). Этим заканчивается выполнение оператора прекращения.

Окончание любой другой аварийной задачи не производится до окончания выполнения оператора прекращения. Оно должно произойти не позднее достижения аварийной задачей точки синхронизации, которой может быть конец ее активизации, начало активизации другой задачи, вызов входа, начало или конец выполнения оператора принятия, оператор отбора, оператор задержки, обработчик исключения или оператор прекращения. Если задача, вызвавшая вход, становится аварийной в ходе рандеву, то ее завершение не производится до окончания рандеву (см. 11.5).

Вызов входа аварийной задачи возбуждает в месте вызова исключение TASKING_ERROR. Аналогично исключение TASKING_ERROR возбуждается в любой задаче, вызвавшей вход аварийной задачи, если вызов входа все еще находится в очереди либо рандеву не окончено (вызовом входа может быть либо оператор вызова входа, либо операторы условного или временного вызова входа); исключение возбуждается не позже окончания аварийной задачи.


Для любой аварийной ( или законченной) задачи значение атрибута CALLABLE есть FALSE.

Если аварийное окончание задачи произошло во время изменения в задаче некоторой переменной, то значение этой переменной не определено.

Пример:



abort USER, TERMINAL.all, POOL(3);

Примечание.

Оператор прекращения следует использовать только в крайних случаях, требующих безусловного завершения. Допускается, что задача может прекратить любую задачу, включая себя самое.

Ссылки:

аварийное состояние при рандеву 11.5, активизация 9.3, атрибут 4.1.4, атрибут CALLABLE 9.9, временной вызов входа 9.7.3, завершенная задача 9.4, зависимая задача 9.4, задача 9, значение логического типа FALSE 3.5.3, имя 4.1, исключение TASKING_ERROR 11.1, обработка имени 4.1, обработчик исключения 11.2, оператор 5, оператор вызова входа 9.5, оператор задержки 9.6, оператор отбора 9.7, оператор принятия 9.5, очередь вызовов входов 9.5, рандеву 9.5, условный вызов входа 9.7.2.

Пред.  Уровень выше  След.

9.9. АТРИБУТЫ ЗАДАЧ И ВХОДОВ

 
Содержание  

9.11. РАЗДЕЛЯЕМЫЕ ПЕРЕМЕННЫЕ


Содержание раздела