Алгоритмы параллельных вычислений и программирование. Бурова И.Г - 192 стр.

UptoLike

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