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


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


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

Таким образом, задача С, работая асинхронно с обслуживаемыми внешними задачами и монитором "буфер", также участвуя попеременно в рандеву, получает из очереди "разборы" и выдает готовые "ответы".

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

Наша цель - добиться того, чтобы к этим процедурам можно было обращаться только в режиме взаимного исключения с развязкой. Именно это и гарантирует выполняемый в "бесконечном" цикле отбирающий оператор.

 

4.14.7.1. Оператор отбора входов (select)

 Общий вид этого оператора

            select

            [ when условие ====> ]  отбираемая_альтернатива

                последовательность_операторов

            or

                  . . .

            or

            [ when условие ====> ]  отбираемая_альтернатива

                            последовательность_операторов

            [ else последовательность_операторов ]

            end select ;

 

Отбираемой альтернативой может быть ОПЕРАТОР ПРИЕМА, ОПЕРАТОР ЗАДЕРЖКИ или ОПЕРАТОР ЗАВЕРШЕНИЯ задачи.


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