Page 89 - 6571
        P. 89
     випадку немає необхідності в неподільному обчисленні умов за-
            тримки.
                  Лістинг  7  –  Алгоритм  розриву  вузла  для  двох  процесів
            (крупномодульне рішення)
                  bool in1 = false, in2 = false;
                  in1 last = 1;
                  process CS1 {
                    while (true) {
                      last = 1;
                      in1 = true; /* протокол входу */
                      <await (!in2 or last == 2);>
                        критична секція;
                      in1 = false; /* протокол виходу */
                      некритична секція;
                    }
                  }
                  process CS2 {
                    while (true) {
                      last = 2; in2 = true; /* протокол входу */
                      <await (!in1 or last == 1);>
                        критична секція;
                      in2 = false; /* протокол виходу */
                      некритична секція;
                    }
                  }
                  Оскільки  умову  закінчення  затримки  не  обов’язково  обчис-
            лювати неподільним чином, кожен оператор await можна замі-
            нити циклом while, який повторюється, поки умова закінчення
            затримки має значення «хиба». Таким чином, отримуємо дрібно-
            модульний алгоритм розриву вузла представлений в лістингу 8.
                  Лістинг  8  –  Алгоритм  розриву  вузла  для  двох  процесів
            (дрібномодульне рішення)
                  bool in1 = false, in2 = false;
                  int last = 1;
                  process CS1 {
                    while (true) {
                      last = 1;
                      in1 = true; /* протокол входу */
                      while (in2 and last == 1) skip;
                                                        88





