Page 111 - 6571
P. 111
ють задавати точний інтервал очікування, а м’ютекси, покинуті
закінченими процесами, автоматично переходять у сигнальний
стан. Мета використання м’ютексів полягає у захисті даних від
пошкодження внаслідок асинхронних змін (стан гонки).
Нехай об’єкт mutex – семафор з початковим значенням 1.
Виконання операції P(mutex) – це те ж саме, що і очікування,
доки значення змінної lock не стане рівним 1, і подальше
присвоєння їй значення 0. Аналогічно виконання операції
V(mutex) - це присвоєння змінній lock значення 1 (за умови, що
вона має значення 0). Дані міркування приводять до вирішення
задачі критичної секції, показаному в лістингу 16.
Лістинг 16 – Рішення задачі критичної секції з використанням
підходу на основі м’ютексів
sem mutex = 1;
process CS[i = 1 to n] {
while (true) {
P(mutex);
критична секція;
V(mutex);
некритична секція;
}
}
2. Задача реалізації бар’єрів(сигнальні події). У реалізаціях
бар’єрів з активним очікуванням використовуються змінні-
прапорці, які встановлюються процесами, що підходять до
бар’єра і скидаються процесами які покидають. Як і при вирі-
шенні задачі критичної секції, семафори полегшують реалізацію
бар’єрної синхронізації. Основна ідея полягає у використанні се-
мафора в якості прапорця синхронізації. Виконуючи операцію V,
процес встановлює прапорець, а при виконанні операції P – очі-
кує установки прапорця, після чого скидає його. Якщо кожен
процес паралельної програми виконується на власному процесо-
рі, то затримки на бар’єрах повинні бути реалізовані за допомо-
гою циклів активного очікування, а не за рахунок блокування
процесів. Таким чином, бажаною є саме реалізація семафорів з
активним очікуванням.
110