Page 42 - 4868
P. 42

Ошибка! Стиль не определен.                                                                40

               порядок виконання оновлень не впливає (не псує) на вид екрану.
                     Повернемося до задачі пошуку шаблону в файлі.Які частини програми
               незалежні і, отже, можуть бути виконані паралельно?Програма починається
               із зчитування першого рядка вводу, щоповинно бути  виконано перед  усіма
               іншими  діями.Після  цього  програма  входить  в  цикл  пошуку  шаблону,
               виводить  рядок,  якщо  шаблон  був  знайдений,  а  потім  зчитує  новий
               рядок.Вивести рядок до того, як у ньому був виконаний пошук шаблону, не
               можна, тому перші два рядки циклу виконати паралельно неможливо.Однак
               можна  прочитати  наступний  рядок  вводу  під  час  пошуку  шаблону  в
               попередньому  рядку  і  можливо  його  друк.Отже,  розглянемо  іншу,

               паралельну версію попередньої програми.
                     string line;
                     прочитати вхідний рядок зstdin в line;
                     while (!EOF) {
                     coшукати pattern в line;
                       if (pattern є в line) вивести line;
                       // прочитати наступний рядок вводу і записати його вline;
                     oc;
                     }

                     За  замовчуванням  оператори  виконуються  послідовно,  тобтоодин  за
               одним.Оператор co(concurrent – паралельний) вказує, що декілька операторів
               можуть  виконуватися  паралельно.Одна  із  форм  оператораco  має  декілька
               гілок(arms).

                     co
                       // оператор_1;
                       // ...
                       // оператор_n;
                     oc
                     Кожна  гілка  включає  оператор  (або  список  операторів).Гілки
               відокремлюються  символом  паралелізму  //.Оператор,  наведений  вище,
               означає наступне: «почати паралельне виконання всіх операторів, після чого
               очікувати  їх  завершення».Таким  чином,  оператор  co  завершується  після

               виконання всіх його операторів.
                     Відзначимо,  що  перша  гілка  оператора  co  є  послідовністю
               операторів.Але  чи  є  незалежними  ці  два  процеси  програми?Відповідь  –  ні,
               оскільки  перший  зчитує  змінну  line,  а  другий  записує  в  неї.Тому,  якщо
               другий процес виконується швидше за перший, то він буде перезаписувати
               рядок до того, як його встигне перевірити перший процес.
                     Як  було  відзначено  вище,  частини  програми  можуть  виконуватися
               паралельно  тільки  в  тому  випадку,  якщо  вони  зчитують  і  записують  різні
               змінні.Припустимо, що другий процес записує не в ту змінну, яку перевіряє
               перший процес, і розглянемо наступну програму.
                     string line1, line2;
                     прочитати рядок вводу зstdin в line1;
   37   38   39   40   41   42   43   44   45   46   47