Page 83 - 6571
        P. 83
     вертає збережене попереднє значення змінної lock. Результат дії
            інструкції TS описується наступною функцією:
                  bool TS(bool lock) {
                    <bool  initial  =  lock;/*  зберегти  початкове  значення
            */
                      lock = true;/* встановити lock */
                      return initial;> /* повернути початкове значення */
                  }
                  Використовуючи інструкцію TS,  можна реалізувати крупно-
            модульний варіант програми з лістингу 4 за алгоритмом, наведе-
            ним в лістингу 5. Умовні неподільні дії в програмі з лістингу 4
            замінюються відповідними циклами. Цикли не закінчуються, до-
            ки змінна lock не набуде значення «хиба», тобто інструкція TS
            повертає значення «хиба». Оскільки всі процеси виконують одні і
            ті  ж  протоколи,  наведене  рішення  працює  незалежно  від  числа
            процесів. Використання блокуючої змінної, як це показано в ліс-
            тингу 5, зазвичай називається циклічним блокуванням (spin lock),
            оскільки  процес  постійно  повторює  цикл,  очікуючи  при  цьому
            зняття блокування.
                  Лістинг 5 – Критичні секції на основі інструкції «перевірити-
            встановити»
                  bool lock = false;/* спільна змінна */
                  process CS[i = 1 to n] {
                    while (true) {
                      while (TS(lock)) skip;/* протокол входу */
                      критична секція;
                      lock = false;/* протокол виходу */
                      некритична секція;
                    }
                  }
                  Рішення задачі критичної секції, аналогічне наведеному в лі-
            стингу 5, може бути реалізовано на будь-якій машині, якщо у неї
            є інструкція, що перевіряє і змінює спільну змінну в одній непо-
            дільній дії. Наприклад, у деяких машинах є інструкція інкременту
            (нарощення),  яка  збільшує  значення  цілочисельної  змінної  і  ви-
            значає умову, що використовується для досягнення позитивного
            значення цієї змінної. Використовуючи дану інструкцію, є мож-
                                                        82





