Page 50 - 6571
P. 50
// прочитати наступний рядок вводу і записати його в
line;
oc;
}
За замовчуванням оператори виконуються послідовно, тобто
один за одним. Оператор co (concurrent – паралельний) вказує,
що декілька операторів можуть виконуватися паралельно. Одна із
форм оператора co має декілька гілок (arms).
co
// оператор_1;
// ...
// оператор_n;
oc
Кожна гілка включає оператор (або список операторів). Гілки
відокремлюються символом паралелізму //. Оператор, наведе-
ний вище, означає наступне: «почати паралельне виконання всіх
операторів, після чого очікувати їх завершення». Таким чином,
оператор co завершується після виконання всіх його операторів.
Відзначимо, що перша гілка оператора co є послідовністю
операторів. Але чи є незалежними ці два процеси програми? Від-
повідь – ні, оскільки перший зчитує змінну line, а другий запи-
сує в неї. Тому, якщо другий процес виконується швидше за пе-
рший, то він буде перезаписувати рядок до того, як його встигне
перевірити перший процес.
Як було відзначено вище, частини програми можуть викону-
ватися паралельно тільки в тому випадку, якщо вони зчитують і
записують різні змінні. Припустимо, що другий процес записує
не в ту змінну, яку перевіряє перший процес, і розглянемо насту-
пну програму.
string line1, line2;
прочитати рядок вводу з stdin в line1;
while (!EOF) {
co
// шукати pattern в line1;
if (pattern є в line1) вивести line1;
// прочитати наступний рядок вводу і записати його
вline2;
oc;
}
49