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

UptoLike

[искать pattern в line];
if ([pattern есть в line])
[вывести line];
// [прочитать следующую строку вводу и записать ее в line];
oc;
}
Независимы ли эти параллельные процессы? Очевидно, нет,
поскольку первый читает из переменной line, а другой записывает
в нее; если второй процесс выполняется быстрее первого, то пере-
запись произойдет раньше, чем строка будет проверена.
Предположим, что второй процесс записывает не в ту перемен-
ную, которую проверяет первый:
string line1, line2;
[прочитать строку ввода из stdin в переменную line1];
while (!EOF) {
co
[искать pattern в line1];
if ([pattern есть в line1])
[вывести line1];
// [прочитать следующую строку в line2];
oc;
}
Теперь процессы работают с разными строками, но в этом слу-
чае первый процесс все время ищет в одной и той же строке, а
второй считывает в line2, которая никогда не рассматривается.
Для исправления ситуации можно поступить очень просто: в
конце каждого цикла поменять роли строк так, что получается про-
грамма:
string line1, line2;
[прочитать строку воода из stdin в line1];
while (!EOF) {
co
22