Раздел 13.2 - Создание задач и взаимодействие между ними

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

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

Сначала нужно создать задачный тип, который мы назовем Babbler, и включим его в пакет Babble. Описание типа может выглядеть следующим образом:


Verbose Configure

При описании задачи описание входа в задачу (entry) в аналогично описанию процедуры. Описание входа в задачу указывает какие запросы к задаче можно делать и какую информацию принимает или возвращает задача при выполнениии запроса.

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


Verbose Configure

Тело задачи указывает, какие действия будет выполнять задача после запуска. Данная задача просто создает несколько локальных переменных и выполняет инструкцию "accept". Инструкция принятия (accept statement) обеспечивает ожидание выполнения другой задачей запроса к соответствующему входу. Когда другая задача выполняет соответствующий запрос, принимающая задача выполняет последовательность инструкций между ключевыми словами "do" и "end" инструкции принятия. Когда задача выполняет эти инструкции, принято говорить что она выполняет рандеву с другой задачей. Запрашивающая вход задача не выполняет никаких действий, пока не будет достигнут "end" в инструкции принятия. Часто во время рандеву принимающая задача копирует данные, переданные вызывающей задачей, для того, чтобы можно было использовать их позднее. Как только рандеву завершается, обе задачи продолжают свою работу.

Приведем короткую процедуру для демонстрации нашего задачного типа. Назовем процедуру Noise. В ней создаются две задачи данного задачного типа и каждой из них посылается запрос Start. Обратите внимание на то, как похоже создание задач на создание переменных обычного типа:


Verbose Configure

Процедура, описывающая экземпляр задачи, подобно процедуре Noise, называется главной процедурой. Главная процедура ожидает завершения всех созданных ею задач, прежде чем сама сможет завершить свою работу. Таким образом Noise перед завершением будет ждать завершения Babble_1 и Babble_2.

Обратите также внимание на то, что когда процедура Noise ``вызывает'' вход `Start' задач Babble_1 и Babble_2, происходит рандеву.


Упражнение:

Будут ли перемешаны на экране текстовые строки, выведенные Babble_1 и Babble_2 после запуска Noise?

  1. Да.
  2. Нет.

Вы можете также:

PREVIOUS Перейти к предыдущему разделу

NEXT Перейти к следующему разделу

OUTLINE Вернуться к содержанию Урока 13

David A. Wheeler ([email protected])

Перевод:   Общая редакция перевода:

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s13s2.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org