Page 85 - 6571
P. 85

TS. Опишемо способи подальшого усунення конфліктів звернен-
            ня до пам’яті.
                  У  лістингу  6  представлено  повне  рішення  задачі  критичної
            секції,  що  використовує  вхідний  протокол  «перевірити-

            перевірити-встановити».  Як  і  раніше,  протокол  виходу  скидає
            змінну lock в початкове значення.


                  Лістинг 6 – Критичні секції на основі інструкції «перевірити-
            перевірити-встановити»

                  bool lock = false;/* спільна змінна блокування */
                  process CS[i = 1 to n] {
                    while (true) {
                      while (lock) skip;/* протокол входу */
                      while (TS(lock)) {
                        while (lock) skip;
                      }
                      критична секція;
                      lock = false;/* протокол виходу */
                      некритична секція;
                    }
                  }



                  10.4 Способи реалізації операторів await


                  Будь-яке рішення задачі критичної секції можна  використо-
            вувати для реалізації безумовної неподільної дії < S; >, прихо-
            вуючи при цьому внутрішні контрольні точки від інших процесів.

            Нехай CSenter – вхідний протокол критичної секції, a CSexit –
            вихідний протокол. Тоді дію < S; > можна реалізувати наступ-
            ним чином:

                  CSenter;
                    S;
                  CSexit;

                  В даному випадку передбачається, що всі секції коду проце-

            сів, які модифікують або посилаються на змінні, що змінюються
            в S (або модифікують змінні, на які посилається S), захищені ана-
            логічними  вхідними  та  вихідними  протоколами.  По  суті,  дужки

            < та > замінені процедурами CSenter та CSexit.




                                                        84
   80   81   82   83   84   85   86   87   88   89   90