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