Составители:
SIGNAL;
}
}
Здесь SIGNAL представляет собой фрагмент программы, дей-
ствие которого сводится к следующему:
— если нет активных процессов-писателей, но есть приостанов-
ленный процесс-читатель, то последний активизируется и продол-
жается;
— если нет активных процессов-читателей или процессов-
писателей, но есть приостановленный процесс-писатель, то этот
процесс-писатель активизируется и продолжается;
— если нет приостановленных процессов-писателей или
процессов-читателей, то входной семафор получает сигнал с помо-
щью операции V(e).
ФРАГМЕНТ ПРОГРАММЫ SIGNAL
if (nw == 0 and dr > 0) {
dr = dr − 1; V(r);
# возобновление процесса-читателя
}
elseif (nr == 0 and nw == 0 and dw > 0) {
dw = dw − 1; V(w);
# возобновление процесса-писателя
}
else
V(e); # разблокирование входа
Таким образом, SIGNAL сигнализирует одному из трех семафоров.
Эти три семафора образуют разделенный двоичный семафор: в
любой момент времени только один из них может и ме ть значение
1 и все выполняемые ветви начинаются операцией P и заканчива-
ются операцией V, так как операторы каждой ветви выполняются
со взаимным исключением.
93
Страницы
- « первая
- ‹ предыдущая
- …
- 90
- 91
- 92
- 93
- 94
- …
- следующая ›
- последняя »