<<
>>

Задачи языка Ада

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

Задача может быть объявлена как тип или как единичный экземпляр (анонимного типа).

Задача-тип состоит из спецификации и тела.

Спецификация содержит:

? имя типа;

? необязательную дискриминантную часть, определяющую параметры, которые могут поступать в экземпляры задачного типа (во время их создания);

? видимую часть, которая определяет входы и предложения представления;

? приватную часть, которая определяет скрытные входы и предложения представления.

Вход именует услугу, которую задача предлагает клиентам (другим задачам). Тело задачи содержит последовательность исполняемых операторов.

Примеры спецификаций задач приведены в табл. 19.2.

Таблица 19.2. Спецификации задач

Задачи языка Ада

583

Примеры объявления задач:

Выполнение объекта-задачи включает три этапа:

? Активация — обработка объявлений декларативной части, тела задачи (на этом этапе создаются и инициализируются все локальные переменные задачи).

? Обычное выполнение — выполнение операторов из тела задачи.

? Финализация — выполнение кода финализации, ассоциированного с объектами в ее декларативной части.

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

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

После активации выполнение задачи-объекта определяется содержанием его тела. Перед выполнением своего тела задача не ждет активации других задач-объектов.

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

Пример 1. Процедура с двумя задачами. procedure Example1 is task A; task B;

task body A is

-- локальные объявления задачи A begin

-- последовательность операторов задачи A end A;

task body B is

-- локальные объявления задачи B

begin

-- последовательность операторов задачи B end B;

begin

-- задачи A и B начинают работу перед -- первым оператором из раздела -- операторов процедуры.

end Example1; -- процедура не прекращается, пока не прекратятся задачи A и B.

584

Глава 19. Основные понятия параллельного программирования

ПРИМЕЧАНИЕ ---------------------------------------------------------------------------------------------------

При обработке декларативной части процедуры активируются две задачи. При пересечении открывающей скобки begin раздела операторов стартуют три процесса (две задачи и сама процедура).

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

Пример 2. Составной блок со статическими и динамическими задачами. declare task type T;

type A is access T;-- ссылочный тип на задачный тип P : A;

Q : A:= new T; -- попытка активации и выполнения динамической задачи, вводится

задержка запуска

B, C : T; -- B и C создаются при обработке объявления task body T is ...;

-- задачи активируются, когда обработка объявлений завершена begin

-- первый оператор выполняется после завершения активации всех задач P := new T; -- активизация и запуск динамической задачи

end;

ПРИМЕЧАНИЕ ---------------------------------------------------------------------------------------------------

При пересечении открывающей скобки begin операторов блока стартуют статические задачи В, С, сам блок и динамическая задача Q.all. Далее к ним присоединяется динамическая задача P.all.

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

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

Пример 3. Параллельные вычисления в блоке (и вычисления вообще) отменяются. Обрабатывается только сигнал исключения. declare

A : TaskTypel; -- успешно проходит свою активацию B : TaskType2; -- генерирует исключение при активации -- здесь задачи должны завершить активацию begin

-- исполнение операторов должно начинаться после завершения активации задач ...-- вычисления отменяются

Синхронизация процессов на основе разделяемых переменных

585

exception - срабатывает ловушка исключения when Tasking_Error =>...; when others = >...;

end;

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

? Задача-родитель ожидает, когда завершится «рождение» (активация) процесса- ребенка.

? Задача-мастер ждет, когда процесс-слуга окончательно «прикажет долго жить» (финализируется).

Преждевременная кончина родителя-мастера приводит к уничтожению всех зависимых задач. Вот такие бытуют порядки в среде параллельных вычислений.

ПРИМЕЧАНИЕ ---------------------------------------------------------------------------------------------------

Мастером динамической задачи считают секцию, где был объявлен ссылочный тип, на основе которого эта задача создается.

<< | >>

Еще по теме Задачи языка Ада:

  1. Три круга ада
  2. ЗАДАЧИ ОБЩИЕ И ЗАДАЧИ СПЕЦИАЛЬНЫЕ
  3. 7. Каждый школьник – это сложнейший мир проблем и задач. Забота о своевременном решении этих проблем и задач составляет основу строительства новой школы
  4. Вторая зрелость наступает тогда, когда человек выполнил задачи зрелого человека, осознал задачи второй зрелости и готов их выполнять
  5. ПРИСМАТРИВАЯСЬ К КОДУ ЯЗЫКА ТЕЛА
  6. ПРИСМАТРИВАЯСЬ К КОДУ ЯЗЫКА ТЕЛА
  7. Реформа языка
  8. А. И. СМИРНИЦКИЙ. СИНТАКСИС АНГЛИЙСКОГО ЯЗЫКА, 1957
  9. Глава 7 ПОНИМАНИЕ КОДА ЯЗЫКА ТЕЛА
  10. Глава 7 ПОНИМАНИЕ КОДА ЯЗЫКА ТЕЛА
  11. И.П.Иванова, В.В.Бурлакова, Г.Г.Почепцов. Теоретическая грамматика современного английского языка, 1981
  12. 8.1.4. Использование языка
  13. 8.1.4. Использование языка
  14. Принцип государственного языка судопроизводства
  15. АНАЛИЗ КОДА ЯЗЫКА ТЕЛА
  16. АНАЛИЗ КОДА ЯЗЫКА ТЕЛА
  17. Код языка тела
  18. Код языка тела
  19. Код языка тела