Page 99 - 4868
P. 99
97 Ошибка! Стиль не определен.
база даних знаходиться в несуперечливому стані. Кожна окрема транзакція
переводить базу даних з одного несуперечливого стану в інший. Для
запобігання взаємного впливу транзакцій процес-письменник повинен мати
винятковий доступ до бази даних. Якщо до бази даних не звертається жоден з
процесів-письменників, то виконувати транзакції одночасно може будь-яка
кількість читачів.
Задача про читачів та письменників – це ще один приклад вибіркового
взаємного виключення. У задачі про філософів, що обідають пари процесів
конкурували за доступ до вилок. Тут за доступ до бази даних змагаються
класи процесів. Процеси-читачі конкурують з письменниками, а окремі
процеси-письменники змагаються між собою. Задача про читачів та
письменників – це також приклад задачі спільної умовної синхронізації,
оскільки процеси-читачі повинні очікувати, поки до бази даних має доступ
хоча б один процес-письменник. Процеси-письменники у свою чергу повинні
очікувати, поки до бази даних мають доступ процеси-читачі або інший
процес-письменник.
1.Рішення задачі про читачів та письменників як задачівзаємного
виключення. Процесам-письменникам потрібен взаємовиключний доступ до
бази даних. Доступ процесів-читачів як групи також повинен бути
взаємовиключним по відношенню до будь-якого процесу-письменника.
Подамо дану задачу як окремий випадок задачі критичної секції. Очевидним
додатковим обмеженням буде забезпечення вибіркового доступу до бази
даних кожного читача і письменника.
Нехай змінна rw – це семафор взаємного виключення з початковим
значенням 1, а змінна nr служить для підрахунку числа активних читачів. У
протоколі входу для процесів-читачів значення змінної nr спочатку
збільшується на 1, а потім виконується перевірка, чи вона рівна 1. Щоб
уникнути взаємного впливу процесів-читачів, додавання і перевірка повинні
виконуватися як критична секція. Аналогічно, неподільним чином повинні
також виконуватися операції віднімання і перевірка значення змінної nr в
протоколі виходу.
Для повного рішення даної задачі, необхідно за допомогою семафорів
реалізувати неподільні дії для виконання описаних вище операцій. Кожна дія
представляє собою критичну секцією, реалізація яких подана в лістингу 1.16.
Нехай mutexR – семафор, що забезпечує взаємне виключення процесів-
читачів у рішенні задачі про читачів та письменників поданого в лістинг 1.22.
Семафор mutexR ініціалізується початковим значенням 1, початок кожної
неподільної дії реалізується операцією P(mutexR), а кінець – операцією
V(mutexR).
Лістинг 1.22 – Рішення задачі про читачів та письменників з
використанням семафорів
int nr = 0; # число активних читачів
sem rw = 1; # блокування доступу до бази даних