Page 100 - 4868
P. 100

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

                     sem mutexR = 1; # блокування доступу читачів до nr
                     process Reader[i = 1 to m] {
                       while (true) {
                         ...
                         P(mutexR);
                         nr = nr+1;
                         if (nr == 1) P(rw); # отримати блокування, якщо перший
                         V(mutexR);
                         зчитати базу даних;
                         P(mutexR);
                         nr = nr-1;
                         if (nr == 0) V(rw); # зняти блокування, якщо останній
                         V(mutexR);
                       }
                     }
                     process Writer[i = 1 to n] {
                       while (true) {
                         ...
                         P(rw);
                         записати в базу даних;
                         V(rw);
                       }
                     }

                     Алгоритм  в  лістингу  1.22  реалізує  рішення  задачі  з  пріоритетом
               читачів.  Якщо  певний  процес-читач  звертається  до  бази  даних,  а  інший
               читач  і  письменник  досягають  протоколів  входу,  то  новий  читач  отримує
               перевагу  перед  письменником.  Отже,  дане  рішення  не  є  справедливим,
               оскільки  нескінченний  потік  процесів-читачів  може  постійно  блокувати
               доступ письменників до бази даних.
                     2. Рішення задачі про читачів та письменників з використанням умовної
               синхронізації.      У     даному      рішенні      представлено        загальний       метод
               програмування,  який  називається  передачею  естафети,  що  використовує
               спільні  двійкові  семафори  як  для  виключення,  так  і  для  сповіщення
               призупинених  процесів.  Метод  передачі  естафети  можна  застосувати  для
               реалізації  будь-яких  операторів  типу  await,  що  в  свою  чергу  дозволяє
               створення  будь-якої  умовної  синхронізації.  Даний  метод  також  можна
               використовувати  для  точного  керування  послідовністю  дій  за  допомогою
               яких відбувається поновлення роботи призупинених процесів.
                     Відповідно  із  визначенням  процеси-читачі  переглядають  базу  даних,  а
               процеси-письменники  її  читають  та  змінюють.  Для  забезпечення  принципу
               несуперечності (цілісності) бази даних письменникам необхідний винятковий
               доступ  до  бази  даних,  але  декілька  процесів-читачів  можуть  працювати
               паралельно. Простий спосіб опису такої синхронізації полягає в підрахунку
               процесів  кожного  із  типів  та  обмеження  значень  лічильників.  Наприклад,
               нехай nr та nw – змінні з невід’ємними цілими значеннями, що зберігають
               відповідно  число  процесів-читачів  і  процесів-письменників,  які  отримали
   95   96   97   98   99   100   101   102   103   104   105