Page 126 - 6571
P. 126

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

                  процесів  кожного  із  типів  та  обмеження  значень  лічильників.
                  Наприклад,  нехай  nr  та  nw  –  змінні  з  невід’ємними  цілими
                  значеннями,  що  зберігають  відповідно  число  процесів-читачів  і

                  процесів-письменників,  які  отримали  доступ  до  бази  даних.
                  Необхідно  уникати  «поганих»  станів,  у  яких  значення  обох
                  змінних позитивні або значення змінної nw більше 1:

                        BAD: (nr > 0Ù nw > 0) Ú nw > 1

                        Доповнююча множина «хороших» станів описується запере-
                  ченням  наведеного  вище  предиката  спрощеного  до  наступного

                  виразу:

                        RW: (nr == 0 Ú nw == 0) Ù nw <= 1

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

                  ного  письменника.  Відповідно  до  поданого  опису  задачі,  схема
                  основної частини процесу-читача виглядає наступним чином:

                        <nr = nr+1; >
                          зчитати базу даних;
                        <nr = nr-1; >

                  А схема процесу-письменника:

                        <nw = nw+1; >
                          записати в базу даних;
                        <nw = nw-1; >

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

                  глобальним інваріантом. У процесах-читачах потрібно захистити
                  операцію  приросту змінної nr  умовою (nw == 0), оскільки при

                  збільшенні  змінної  nr  значенням  nw  повинен  бути  0.  Процеси-
                  письменники                   повинні                задовольняти                  умові
                  (nr == 0 and nw == 0), оскільки при збільшенні nw бажаним є
                  нульове значення як для змінної nr, так і для змінної nw. Однак у



                                                             125
   121   122   123   124   125   126   127   128   129   130   131