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 – змінні з невід’ємними цілими значеннями, що зберігають
відповідно число процесів-читачів і процесів-письменників, які отримали