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
   45   46   47   48   49   50   51   52   53   54   55