Составители:
Рубрика:
Процедура tick лишь увеличивает значение переменной tod на
единицу; она регулярно запускается высокоприоритетным процес-
сом, связанным аппаратным таймером.
Один из вариантов реализации — использование так называе-
мого накрывающего условия. Смысл этого условия в том, что его
выполнение влечет запуск всех ожидающих процессов, которые по-
сле этого должны проверить условия своего выполнения.
При этом в мониторе можно использовать одну условную пе-
ременную (назовем ее check) с накрывающим условием “значение
tod увеличено”. В этом случае при каждом запуске процедуры
tick будут запускаться все ожидающие процессы и будут прове-
рять условия своего запуска; в результате запустятся те процессы,
условия запуска которых выполнены. Остальные останутся в со-
стоянии ожидания. Для запуска всех процедур в процедуре tick
используется оповещающая операция signal_all.
monitor Timer{
int tod=0;
cond check; # получает сигнал при увеличении tod
procedure delay(int interval){
int wake_time;
wake_time=tod+interval;
while (wake_time>tod) wait(check);
}
procedure tick(){
tod=tod+1;
signal_all(check);
}
}
Использование “покрывающих условий” подходит, если затраты
на ложные сигналы невелики (т. к. при “ложном” сигнале пр оцес с
запускается, проверяет условия своего выполне ния, а затем снова
возвращается в состояние ожидания). Если же периоды “сна” вели-
ки, то скорее всего такой подход приводит к излишним затратам
ресурсов.
Для больших периодов “сна” более эффективно использовать в
мониторе приоритетный оператор wait. Это удобно в тех случа-
28
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »