Page 53 - 6571
P. 53
done = true;
break;
}
очікувати очищення буфера;
buffer = line2;
сигналізувати про заповнення буфера;
}
oc;
6.3 Синхронізація
(задача пошуку максимального елемента масиву)
Розглянемо іншу задачу, яка вимагає синхронізації процесів.
Вона полягає у пошуку максимального елемента масиву a[n].
Припустимо, що nдодатне число і всі елементи масиву є додатні
цілі числа.
Пошук максимального елемента в масиві a – це приклад за-
дачі накопичення. В даному випадку зберігається (накопичуєть-
ся) максимальний з переглянутих елементів, або, іншими слова-
ми, всі значення зводяться до їх максимуму. Нехай m – змінна для
зберігання максимального значення. Ціль програми за допомогою
логіки предикатів можна описати наступним чином.
j " : 1 £ £ : n m a³ [ ],j
j
j
j $ : 1 £ £ : n m = [ ].j
a
Перший рядок говорить, що при завершенні програми зна-
чення змінної mповинно бути не менше будь-якого значення в
масиві a. Другий рядок означає, що змінна повинна бути рівна
деякому значенню з масиву a.
Для вирішення даної задачі можна використати наступну по-
слідовну програму.
int m = 0;
for [i = 0 to n-1] {
if (a[i] > m) m = a[i];
}
Ця програма ітеративно переглядає всі значення в масиві a.
Якщо існує деяке значення з масиву a яке більше поточного мак-
симуму, то воно присвоюється m. Оскільки передбачається, що
52