Составители:
Рубрика:
Т а б л и ц а № 3.
Вызов Обслуживание Результат Приостановка Образование
вызвавшего очереди
call proc Вызов да нет
процедуры
call in Рандеву да да
Динамическое
send proc создание нет нет
процесса
Асинхронная
send in передача нет да
сообщения
Замечание. Операцию нельзя одновременно обслуживать с по-
мощью proc и in, ибо возникает неопределенность, помещать ли в
очередь. Однако, она может обслуживаться в нескольких операто-
рах in, находящихся в нескольких процессах модуля; в этом случае
образуется единая очередь с неделимым доступом.
Для мониторов и асинхронной передачи сообщений ранее был
определен примитив empty, определяющий есть ли объекты в ка-
нале сообщений или в очереди условной переменной.
Здесь определим функцию ?opname, возвращающую число ожи-
дающих вызовов операции opname.
Пример:
in op1 ( . . . ) --> S1;
[ ] op2 ( . . . ) and ?op1==0 --> S2;
Здесь операции op1 и op2 находятся в неравном положении: вы-
зов op2 возможен только в том случае, если не было вызовов op1,
а вызов op1 возможен всегда.
§ 11. Очередь и кольцевой буфер
Здесь продемонстрируем различные способы вызова и обслужи-
вания операций.
ПОСЛЕДОВАТЕЛЬНАЯ ОЧЕРЕДЬ
module Queue
op deposit(type T), fetch(result type T);
body
89
Страницы
- « первая
- ‹ предыдущая
- …
- 86
- 87
- 88
- 89
- 90
- …
- следующая ›
- последняя »