Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 231


       end loop ;

                  end буфер ;

  end анализ_синтез ;

 

4.14.7. Замечания о конструктах (продолжение)

Итак, в теле пакета анализ_синтез объявлен производный тип "разбор". Он предназначен для использования только в теле пакета для взаимодействия между задачами А и С. Поэтому от пользователя скрыт.

Затем объявлена задача "буфер". Это и есть монитор Хоара, регулирующий доступ к очереди разборов как ресурсу, разделяемому между задачами А и С. Но, как вы увидите, в самом мониторе никак ни отражен тот факт, что он имеет дело именно с задачами А и С. Он пригоден для буферизации объектов типа "разбор" между любыми задачами, лишь бы они обращались к его входам стань_в_очередь и выйди_из_очереди. (Как видно по названиям, эти входы монитора соответствуют операциям над очередью).

Далее следует тело задачи А. Формально тело задачи отличается от тела процедуры лишь тем, что в первом допустимы специальные "задачные" операторы, недопустимые в теле обычной процедуры. Один из таких "задачных" операторов - оператор приема (accept). По форме он похож на объявление процедуры. Во всяком случае, содержит название соответствующего входа, список формальных параметров и тело - последовательность операторов между ключевыми словами do и end названием входа.

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


- Начало -  - Назад -  - Вперед -