Составители:
Рубрика:
Операциями wait и signal поддерживается обычная очередь
FIFO (приоритетом является время задержки).
Приоритетный оператор wait(cv, rank) позволяет влиять на
порядок в очереди присвоением процессу того или иного ранга.
Здесь cv — условная переменная, а rank — целочисленное выра-
жение.
Приостановленные процессы упорядочиваются в очереди со-
гласно присвоенным им приоритетом (рангом) в порядке возрас-
тания параметра rank (при одинаковых значениях rank (порядок
следования не стандартизуется и может зависеть от реализации);
хотя обычно запускается процесс, ожидавший дольше всех).
Для избежания ошибок в программе следует применять только
один тип оператора wait.
При определении ранга процесса, находящегося в начале очере-
ди задержки, применяется оператор minrank: вызов
minrank(cv);
возвращает ранг процесса в начале очереди, связанной с пере-
менной cv, при условии, что очередь не пуста, и что при организа-
ции очереди используется приор итетн ый оператор wait; в против-
ном случае возвращается непредсказуемое целое число.
Операция signal_all применяется в виде
signal_all(cv);
посылает сигнал запуска всем процессам в очереди cv; каждый
из них совершает перепроверку условий запуска и запускается в
соответствии с правилами исключения (напр им ер, в одной очереди
могут оказаться процессы, затребовавшие разные ресурсы, которые
уже захвачены каким-либо п роце ссом ; некоторые ресурсы к этому
моменту могут освободиться).
В результате операции signal_all некоторые процессы могут
остаться в очереди, другие — запустятся; заметим, что процесс вы-
работавший сигнал, всегда продолжает работать в мониторе.
Фактически операция
signal_all(cv)
эквивалентна стр оке
while (!empty(cv)) signal(cv);
22
Страницы
- « первая
- ‹ предыдущая
- …
- 19
- 20
- 21
- 22
- 23
- …
- следующая ›
- последняя »