Составители:
Рубрика:
IN("tag", field_1, . . ., field_n);
— извлечение кортежа из пространства кортежей (аналогично
оператору receive).
Каждое поле field_i может быть выражением или формаль-
ным параметром вида ?var, где var — имя переменной выполняе-
мого процесса.
Аргументы примитива IN называются шаблоном. Процесс IN
ждет, пока в пространстве кортежей появится хотя бы один кор-
теж, соответствующий шаблону, и удаляет его из пространства
кортежей.
Кортеж d соответствует шаблону t, если
1) их метки идентичны;
2) число полей кортежа d и шаблона t одинаково;
3) значение каждого выражения в шаблоне t (если оно указано)
равно соответствующему значению в кортеже данных d.
После того, как кортеж будет удален из пространства кортежей
формальным параметрам шаблона присваивается соответствующие
значения.
Пример 1. Реализация семафора.
Пусть sem — символьное имя семафора. Тогда операция V над
семафором (увеличение семафора на единицу) будет иметь вид
OUT("sem"), а операция P над семафором (ожидание увеличения се-
мафора на единицу, если он был нуль) будет иметь вид IN("sem").
Замечание. Операции P и V состоят из следующих неделимых
операций: P(s): <await(s>0); s=s-1;>, V(s): <s=s+1;>.
Значение семафора — число кортежей sem в пространстве кор-
тежей.
Для моделирования массива семафоров используется дополни-
тельное поле, представляющее собой индекс массива, например
IN("sems", i); # P[sems[I]]
OUT("sems", i); # V[sems[I]]
Базовый примитив RD (блокирующая операция просмотра) ис-
пользуется для просмотра кортежей в пространстве кортежей (без
их изъятия из этого пространства — в отличие от примитива IN).
Если t — шаблон, то RD(t) приостанавливает процесс до тех пор,
пока в пространстве кортежей не появится кортеж, соответствую-
щий шаблону t.
193
Страницы
- « первая
- ‹ предыдущая
- …
- 190
- 191
- 192
- 193
- 194
- …
- следующая ›
- последняя »