Page 82 - 6571
P. 82

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




                        Лістинг 4 – Критичні секції на основі блокувань

                        bool lock = false;
                        process CS1 {
                          while (true) {
                            <await (!lock) lock = true;> /* вхід */
                              критична секція;
                            lock = false;/* вихід */
                            некритична секція;
                          }
                        }
                        process CS2 {
                          while (true) {

                            < await (!lock) lock = true;> /* вхід */
                              критична секція;
                            lock = false;/* вихід */
                            некритична секція;
                          }
                        }

                        Перевага протоколів входу і виходу, показаних в лістингу 4,
                  по відношенню до протоколів з лістингу 3 полягає в тому, що їх
                  можна  використовувати  для  вирішення  задачі  критичної  секції

                  при будь-якому числі процесів. Всі вони будуть поділяти спільну
                  змінну lock і виконувати одні і ті ж протоколи.



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


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

                  цію для реалізації умовних неподільних дій.
                        Інструкція «перевірити-встановити» (test and set – TS) в яко-
                  сті  аргументу  отримує  спільну  змінну  lock  і  повертає  логічне

                  значення.  У  неподільній  дії  інструкція  TS  зчитує  і  зберігає  зна-
                  чення змінної lock, присвоює їй значення «істина», а потім по-

                                                              81
   77   78   79   80   81   82   83   84   85   86   87