Page 125 - 6571
P. 125
Лістинг 22 – Рішення задачі про читачів та письменників з
використанням семафорів
int nr = 0; # число активних читачів
sem rw = 1; # блокування доступу до бази даних
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);
}
}
2. Рішення задачі про читачів та письменників з викорис-
танням умовної синхронізації. У даному рішенні представлено
загальний метод програмування, який називається передачею ес-
тафети, що використовує спільні двійкові семафори як для ви-
ключення, так і для сповіщення призупинених процесів. Метод
передачі естафети можна застосувати для реалізації будь-яких
операторів типу await, що в свою чергу дозволяє створення будь-
якої умовної синхронізації. Даний метод також можна викорис-
товувати для точного керування послідовністю дій за допомогою
яких відбувається поновлення роботи призупинених процесів.
Відповідно із визначенням процеси-читачі переглядають базу
даних, а процеси-письменники її читають та змінюють. Для
124