Page 76 - 6571
P. 76

дження можна представити у формі  I Ù                   L, то доведення правиль-
                  ності  процесів  будуть  вільні  від  взаємного  втручання.  Справа  в
                  тому, що: 1) предикат I  інваріантний щодо кожної дії присвоєння
                  a ; 2) жодна дія присвоєння в одному процесі не може вплинути

                  на локальний предикат L в іншому процесі, оскільки ліва частина
                  присвоєння a відрізняється від змінних в предикаті L.
                        Якщо всі твердження використовують глобальний інваріант і

                  локальний предикат так, як це описано вище, то вимога взаємно-
                  го невтручання (1) виконується для кожної пари дій присвоєння
                  та критичних тверджень. Крім того, необхідно перевірити тільки
                  трійки  в  кожному  процесі,  щоб  впевнитися  в  тому,  що  кожне

                  критичне твердження має вищеописаний вигляд, а предикат  I  є
                  глобальним  інваріантом.  При  цьому  немає  жодної  необхідності

                  переглядати твердження або оператори в інших процесах. Факти-
                  чно з масиву ідентичних процесів досить перевірити тільки один.
                  У будь-якому випадку необхідно перевірити лише лінійне число
                  операторів і тверджень у порівнянні із перевіркою експоненціаль-

                  ної кількості історій програми.


                        9.3 Синхронізація процесів


                        Послідовність операторів всередині оператора await для ін-

                  ших  процесів  виступає  як  неподільна  одиниця.  Це  означає,  що
                  під час визначення того, чи втручаються процеси в роботу один
                  одного, можна не звертати увагу на результати виконання окре-
                  мих операторів. Достатньо з’ясувати, чи може вся послідовність

                  операторів зумовити втручання. Наприклад, розглянемо наступну
                  неподільну дію:

                        <x = x+1; y = y+1;>

                        Жодне присвоєння саме по собі не може викликати втручан-
                  ня, оскільки жодний інший процес не може побачити стан,  при

                  якому змінна x уже була збільшена на 1, а змінна y ще ні. Причи-
                  ною втручання може стати тільки пара присвоєнь.
                        Внутрішні  стани  сегментів  програми  всередині  кутових  ду-
                  жок також неподільні. Отже, жодне твердження про внутрішній

                  стан програми не може зазнавати втручання з боку іншого проце-
                  су. Наприклад, твердження в середині наступної неподільної дії
                  не є критичним.


                                                              75
   71   72   73   74   75   76   77   78   79   80   81