Page 79 - 6571
P. 79
критична секція;
протокол виходу;
некритична секція;
}
}
Кожна критична секція є послідовністю операторів, що мають
доступ до деякого спільного об’єкту. Кожна некритична секція –
це ще одна послідовність операторів. Передбачається, що процес,
який увійшов в критичну секцію, обов’язково коли-небудь із неї
вийде. Таким чином, процес може завершитися тільки поза кри-
тичною секцією. Розробимо відповідні протоколи входу і виходу,
які задовольняють наступним чотирьом властивостям.
1. Взаємне виключення. У будь-який момент часу тільки один
процес може виконувати свою критичну секцію.
2. Відсутність взаємного блокування (живе блокування). Як-
що декілька процесів намагаються увійти в свої критичні секції,
то хоча б одному це обов’язково вдасться.
3. Відсутність зайвих затримок. Якщо один процес намага-
ється увійти в свою критичну секцію, а інші виконують свої не-
критичні секції або уже завершили своє виконання, першому
процесу дозволяється вхід в критичну секцію.
4. Можливість входу. Процес, який намагається увійти в
критичну секцію, рано чи пізно це зробить.
Перші три властивості є властивостями безпеки, четверта –
властивістю живучості. Для взаємного виключення поганим є
стан, коли два процеси перебувають у своїх критичних секціях.
Для відсутності взаємного блокування поганим є стан, коли всі
процеси очікують входу у секцію, але жоден із процесів не може
його виконати. У рішенні з активним очікуванням такий стан на-
зивається станом з відсутнім живим блокуванням, оскільки про-
цеси працюють у середині вічного циклу. Для відсутності зайвих
затримок поганим є стан, коли один-єдиний процес, який намага-
ється увійти в критичну секцію, не може цього зробити, навіть
якщо всі інші процеси знаходяться поза межами критичних сек-
цій. Можливість входу є властивістю живучості, оскільки вона
залежить від стратегії планування.
Тривіальний спосіб вирішення задачі критичної секції поля-
гає в обмеженні кожної критичної секції кутовими дужками, тоб-
то у використанні безумовних операторів await. Із семантики
78