Page 67 - 4868
P. 67

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

                     Використовуючи  змінну  lock  замість  in1  та  in2,  можна  реалізувати
               протоколи  входу  і  виходу  в  програмі  з  лістингу  1.3  так,  як  це  показано  в

               лістингу 1.4.
                     Перевага  протоколів  входу  і  виходу,  показаних  в  лістингу  1.4,  по
               відношенню  до  протоколів  з  лістингу  1.3  полягає  в  тому,  що  їх  можна
               використовувати для вирішення задачі критичної секції при будь-якому числі
               процесів.Всі вони будуть поділяти спільну змінну lock і виконувати одні і ті

               ж протоколи.

                     Лістинг 1.4– Критичні секції на основі блокувань
                     bool lock = false;
                     process CS1 {
                       while (true) {
                         <await (!lock) lock = true;> /* вхід */
                           критична секція;
                         lock = false;/* вихід */
                         некритична секція;
                       }
                     }
                     process CS2 {
                       while (true) {
                         < await (!lock) lock = true;> /* вхід */
                           критична секція;
                         lock = false;/* вихід */
                         некритична секція;
                       }
                     }



                     10.3. Інструкції реалізації умовних неподільних дій


                     Використання змінної lock замість in1 та in2, показане в лістингу 1.4,
               є  дуже  важливим,  оскільки  майже  усі  обчислювальні  машини,  особливо
               мультипроцесори,  мають  спеціальну  інструкцію  для  реалізації  умовних

               неподільних дій.
                     Інструкція  «перевірити-встановити»  (test  and  set  –  TS)  в  якості
               аргументу  отримує  спільну  змінну  lock  і  повертає  логічне  значення.У
               неподільній  дії  інструкція  TS  зчитує  і  зберігає  значення  змінної  lock,
               присвоює  їй  значення  «істина»,  а  потім  повертає  збережене  попереднє
               значення  змінної  lock.Результат  дії  інструкції  TS  описується  наступною
               функцією:
                     bool TS(bool lock) {
                       <bool initial = lock;/* зберегти початкове значення */
                         lock = true;/* встановити lock */
                         return initial;> /* повернути початкове значення */
   62   63   64   65   66   67   68   69   70   71   72