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


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


Завершает внутренность цикла оператор вызова входа стань_в_очередь в задаче "буфер".

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

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

Когда управление попадает на вызов входа стань_в_очередь, задача А приостанавливается снова, на этот раз потому, что требуется рандеву с задачей "буфер" для передачи готового разбора в очередь разборов. После этого рандеву снова работает оператор приема входа "прими" и т.д.

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

Задача С. Теперь должно быть понятно тело задачи С как формально, так и содержательно.


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