Ада-95. Компилятор GNAT

       

Активация задачи


Для процесса активации задач приняты следующие правла:

Для статических задач, активация начинается немедленно после окончания процесса элаборации описательной части в которой эти задачи описаны.

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

Задаче, перед выполнением своего тела, не требуется ожидать активацию других задач, которые созданны одновременно с ней.

Задача может попытаться осуществить взаимодействие с другой задачей, которая уже создана, но еще не активирована.

При этом, выполнение вызывающей задачи будет задержано до тех пор, пока не произойдет взаимодействие.

Если объект-задачи описан в спецификации пакета, то он начнет свое выполнение после окончания процесса элаборации описательной части тела пакета.

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

Задача, которая выполнила инструкцию, ответственную за создание задач, будет заблокирована до тех пор, пока созданные задачи не окончат свою активацию.

Если в процессе элаборации описательной части возбуждено исключение, то любая задача, созданная в процессе элаборации становится прекращенной

и никогда не активируется.

В виду того, что на этом этапе задача сама по себе не может обрабатывать исключения, модель языка требует, чтобы такую ситуацию обрабатывала родительская задача или владелец задачи, поскольку будет возбуждено предопределенное исключение Tasking_Error.

В случае динамического создания задач, возбуждение исключения осуществляется после инструкции которая содержит аллокатор.

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

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

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

    Атрибут задачи 'Callable возвращает значение True

    только в случае, когда указанная задача не находится в состоянии завершенная или прекращенная.

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

    Атрибут задачи 'Terminated возвращает значение True

    когда указанная задача находится в прекращенном состоянии.



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