Page 87 - 6571
P. 87
в умові В. Це призводить до конфлікту звернення до пам’яті,
оскільки кожен призупинений процес постійно звертається до
змінних, що використовуються в протоколах критичної секції та
в умові B.
Щоб зменшити кількість конфліктів звернення до пам’яті,
процес перед повторною спробою увійти в критичну секцію по-
винен робити паузу. Нехай Delay – деякий код, що уповільнює
виконання процесу. Тоді можна використати наступний прото-
кол, який реалізує умовну неподільну дію.
CSenter;
while (!B) { CSexit; Delay; CSenter; }
S;
CSexit;
Кодом Delay може бути, наприклад, порожній цикл, який
виконується випадкову кількість раз. Щоб уникнути конфліктів
пам’яті в циклі у коді Delay слід використовувати тільки локаль-
ні змінні. Цей тип протоколу «відходу» («back-off») є корисним і
в самих протоколах CSenter, наприклад, його можна використо-
вувати замість skip в циклі затримки протоколу «перевірити-
встановити».
Запитання для самоперевірки
1. Що собою представляє критична секція у термінах парале-
льної програми?
2. Яким властивостям повинні задовольняти протоколи входу
в критичну секцію та виходу із неї?
3. Коли програма перебуває у стані з відсутнім живим блоку-
ванням?
4. У чому полягає перевага протоколів входу і виходу реалі-
зованих через змінну lock по відношенню до випадку викорис-
тання двох змінних?
5. Які Ви знаєте інструкції реалізації умовних неподільних
дій?
6. Який принцип роботи інструкції «перевірити-встановити»?
7. Що розуміють під циклічним блокуванням у термінах па-
ралельної програми?
8. Який принцип роботи інструкції «перевірити-перевірити-
встановити»?
86