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
   48   49   50   51   52   53   54   55   56   57   58