Составители:
Рубрика:
type T buf[n];
int front=1, rear=1, count=0;
# front - передняя граница, rear - задняя граница,
# count - количество элементов в buf
proc deposit(item) {
if (count<n) {
buf[rear]=item;
# при вызове deposit в buf
# помещается новый элемент
rear=(rear+1) mod n; count=count+1;
}
else
[действия, соответствующие переполнению];
}
proc fetch(item) {
if (count>0) {
item=buf[front];
# при вызове fetch из buf извлекается элемент
front=(front+1) mod n; count=count-1;
}
else
[действия, соответствующие опустошению];
}
end Queue
Замечание 1. Если deposit вызван оператором call, то вызы-
вающий процесс ждет, а если deposit вызвана оператором send, то
вызывающий процесс продолжает работу.
Замечание 2. Модуль Queue пригоден для использования одним
процессом в другом модуле , но его не могут использовать одновре-
менно несколько процессов, ибо в нем нет критических секций для
защиты переменных модуля; при параллельном вызове операций
может возник нуть взаимное влияние.
Введем теперь оператор receive, а именно, следующий опера-
тор ввода
in op(f_1, . . ., f_n) --> v_1=f_1; . . .; v_n=f_n; ni
обозначим
90
Страницы
- « первая
- ‹ предыдущая
- …
- 87
- 88
- 89
- 90
- 91
- …
- следующая ›
- последняя »