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

UptoLike

Примитивы INP и RDP выполняют те же действия, что IN и
RD, но не являются блокирующими; они кроме того возвращают
значение TRUE или FALSE в зависимости от того, присутствует или
нет кортеж с данным шаблоном в пространстве кортежей.
Примитив INP служит для извлечения кортежа из простран-
ства кортежей, если он там имеется данным шаблоном);
примитив RDP предназначен для чтения кортежа (но, в отли-
чие RD оставляет его в пространстве кортежей, то есть является
неблокирующим).
Пример 2. Реализация барьера-счетчика.
OUT("barier", 0);
# создание элемента barier в
# пространстве кортежей с нулевым
# значением счетчика
Достигнув барьера тот или иной процесс извлекает счетчик из
ПК:
IN("barier", ?counter);
# получение кортежа "barier"
OUT("barier", counter=counter+1);
# увеличение счетчика на единицу
Далее процесс ждет, пока к барьеру придут все n процессов с
помощью блокирующего чтения
RD("barier", n);
При появлении указанного кортежа в пространстве кортежей
(ПК) процесс продолжает работу.
Шестой последний) примитив в языке Linda примитив,
создающий новые кортежи
EVAL("tag", expr_1, . . ., expr_n);
Среди expr_i могут быть процедуры или функции. При со-
здании кортежа они вычисляются, причем все поля кортежа вы-
числяются параллельно. Меткой кортежа становится метка "tag",
а полями значения после вычисления функций и процедур.
Пример 3. Рассмотрим параллельный оператор
co[i=1 to n]
a[i]=f(i);
Ему соответствует C-программа, обогащенная примитивами
Linda
for(i=1; i<=n; i++)
EVAL("a", i, f(i));
194