Page 136 - 6571
P. 136
Якщо черга, що асоціюється із змінною cv порожня, то дана
функція повертає значення «істина», інакше – «хиба».
Процес блокується на умовній змінній cv за допомогою ви-
клику методу
wait(cv);
Виконання операції wait поміщає робочий процес в кінець
черги, що асоціюється із змінною cv. Для того щоб інший процес
зміг увійти в монітор з метою запуску призупиненого процесу,
операція wait скасовує винятковий доступ до монітора для про-
цесу, що її викликав.
Заблоковані процеси запускаються операторами signal
шляхом виклику методу
signal(cv);
Даний метод виконує перевірку черги затримки змінної cv.
Якщо у черзі знаходяться призупинені процеси, то оператор
signal запускає процес із «голови» черги. Таким чином, операції
wait та signal забезпечують порядок сигналізації FIFO.
15.3 Визначення порядку сигналізації
Виконуючи операцію signal, процес працює в моніторі і,
отже, може керувати блокуванням, неявно зв’язаним із моніто-
ром. В результаті виникає дилема. Якщо операція signal запус-
кає інший процес, то виходить, що одночасно можуть виконува-
тися два процеси: процес, який виконав операцію signal та за-
пущений нею на виконання. Проте, в подальшому може викону-
ватися тільки один із них (навіть у випадку мультипроцесорів),
оскільки лише один процес може мати винятковий доступ до мо-
нітора. Таким чином, можливі два варіанти виконання:
1) сигналізувати і продовжити. Процес, що виконав опера-
цію signal продовжує роботу, а процес, який отримав сигнал,
виконується після нього;
2) сигналізувати і очікувати: Процес, що виконав операцію
signal очікує певний проміжок часу, а процес, який отримав си-
гнал, виконується відразу.
Дисципліна (порядок) «сигналізувати і продовжити» не
перериває обслуговування. Процес, що виконує операцію signal,
135