Page 123 - 6571
P. 123
часто використовують для порівняння механізмів синхронізації.
Вона також досить важлива для практичного застосування.
Завдання про читачів та письменників звучить наступним
чином: з базою даних працює два типи процесів – читачі та пись-
менники. Читачі виконують транзакції, що переглядають записи
бази даних, а транзакції письменників одночасно переглядають і
змінюють записи. Передбачається, що спочатку база даних зна-
ходиться в несуперечливому стані. Кожна окрема транзакція пе-
реводить базу даних з одного несуперечливого стану в інший.
Для запобігання взаємного впливу транзакцій процес-письменник
повинен мати винятковий доступ до бази даних. Якщо до бази
даних не звертається жоден з процесів-письменників, то викону-
вати транзакції одночасно може будь-яка кількість читачів.
Задача про читачів та письменників – це ще один приклад
вибіркового взаємного виключення. У задачі про філософів, що
обідають пари процесів конкурували за доступ до вилок. Тут за
доступ до бази даних змагаються класи процесів. Процеси-читачі
конкурують з письменниками, а окремі процеси-письменники
змагаються між собою. Задача про читачів та письменників – це
також приклад задачі спільної умовної синхронізації, оскільки
процеси-читачі повинні очікувати, поки до бази даних має доступ
хоча б один процес-письменник. Процеси-письменники у свою
чергу повинні очікувати, поки до бази даних мають доступ про-
цеси-читачі або інший процес-письменник.
1. Рішення задачі про читачів та письменників як задачі вза-
ємного виключення. Процесам-письменникам потрібен взаємови-
ключний доступ до бази даних. Доступ процесів-читачів як групи
також повинен бути взаємовиключним по відношенню до будь-
якого процесу-письменника. Подамо дану задачу як окремий ви-
падок задачі критичної секції. Очевидним додатковим обмежен-
ням буде забезпечення вибіркового доступу до бази даних кож-
ного читача і письменника.
Нехай змінна rw – це семафор взаємного виключення з
початковим значенням 1, а змінна nr служить для підрахунку
числа активних читачів. У протоколі входу для процесів-читачів
значення змінної nr спочатку збільшується на 1, а потім
виконується перевірка, чи вона рівна 1. Щоб уникнути взаємного
впливу процесів-читачів, додавання і перевірка повинні
122