287
какой-то третий процесс. Если несколько процессов ожидают одного и
того же события, то какой (или какие) из них должен быть разблокирован?
Если в момент выдачи сигнала нет процессов, ожидающих этого события,
то должен ли сигнал сохраняться или его можно "потерять"?
Общий подход к решению этой проблемы иллюстрируется
расширением модели "одноместной комнаты", показанным на рисунке 8.3.
Для каждого события, которое может ожидаться в мониторе, мы вводим
свою очередь с соответствующими входными и выходными дверями для
нее. На рисунке эти очереди показаны внизу монитора. Мы вводим также
очередь, которую мы называем приоритетной. Процессы, находящиеся в
очередях, не считаются находящимися в мониторе. "Правила для
посетителей" комнаты-монитора следующие.
1. Новый процесс поступает во входную очередь. Новый процесс
может войти в монитор через дверь 1 только, если в мониторе нет
других процессов.
2. Если процесс выходит из монитора через дверь 2 (выход), то в
монитор входит процесс из двери 4 – из приоритетной очереди.
Если в приоритетной очереди нет ожидающих, входит процесс из
двери 1 (если есть ожидающие за ней).
3. Процесс, выполняющий операцию wait, выходит из монитора в
дверь, ведущую в соответствующую очередь (5 или 7).
4. Если процесс выполняет операцию signal, то проверяется
очередь, связанная с событием. Если эта очередь непуста, то
сигнализирующий процесс уходит в приоритетную очередь (дверь
3), а в монитор входит один процесс из очереди к событию (дверь
6 или 8). Если очередь пуста, сигнализирующий процесс остается
в мониторе.
5. Все очереди обслуживаются по дисциплине FCFS.