Теория распараллеливания и синхронизация. Демьянович Ю.К - 59 стр.

UptoLike

while (true) {
turn[i] = 1; turn[i] = max(turn[1 : n]) + 1;
for [j = 1 to n st j! = i]
while
turn[j]! = 0 and (turn[i], i) > (turn[j], j)
skip;
# либо turn[i] > turn[j], либо i > j, если turn[i] = turn[j]
[критическая секция];
turn[i] = 0;
[некритическая секция];
}
}
Заметим, что максимальное значение в массиве определяется
считыванием всех его элементов и отысканием наибольшего. По-
скольку эти действия не являются неделимыми, то точный р езуль-
тат не гарантируется. Но если несколько процессов получают одно
и то же “значение очереди” .е. номер), то происходит их упорядо-
чивание по правилу, описанному в замечании 2.
§9 Барьерная синхронизация в цикле
Многие задачи решаются с помощью итерац ионных алгоритмов,
которые последовательно вычисляют приближение к решению и за-
вершаются после выполнения некоторого условия. В ряде случаев
обрабатываются некоторые массивы, причем в основном к повто-
ряются одни и те же действия.
Рассмотрим следующую схему параллельной реализации по-
добных итераций:
while (true) {
co [i = 1 to n]
[тело решаемой задачи с номером i]
oc
}
Реализаци я по этой схеме неэффективна, ибо при каждой итера-
ции создаются и уничтожаются процессы. Другая схема реализа-
ции состоит в том, что процессы создаются один раз, а итерации
60