Page 82 - 6571
P. 82
Використовуючи змінну lock замість in1 та in2, можна ре-
алізувати протоколи входу і виходу в програмі з лістингу 3 так,
як це показано в лістингу 4.
Лістинг 4 – Критичні секції на основі блокувань
bool lock = false;
process CS1 {
while (true) {
<await (!lock) lock = true;> /* вхід */
критична секція;
lock = false;/* вихід */
некритична секція;
}
}
process CS2 {
while (true) {
< await (!lock) lock = true;> /* вхід */
критична секція;
lock = false;/* вихід */
некритична секція;
}
}
Перевага протоколів входу і виходу, показаних в лістингу 4,
по відношенню до протоколів з лістингу 3 полягає в тому, що їх
можна використовувати для вирішення задачі критичної секції
при будь-якому числі процесів. Всі вони будуть поділяти спільну
змінну lock і виконувати одні і ті ж протоколи.
10.3 Інструкції реалізації умовних неподільних дій
Використання змінної lock замість in1 та in2, показане в
лістингу 4, є дуже важливим, оскільки майже усі обчислювальні
машини, особливо мультипроцесори, мають спеціальну інструк-
цію для реалізації умовних неподільних дій.
Інструкція «перевірити-встановити» (test and set – TS) в яко-
сті аргументу отримує спільну змінну lock і повертає логічне
значення. У неподільній дії інструкція TS зчитує і зберігає зна-
чення змінної lock, присвоює їй значення «істина», а потім по-
81