Технология программирования для распределенных параллельных систем. Демьянович Ю.К - 28 стр.

UptoLike

ях, когда имеется статическая упорядоченность . е. упорядочен-
ность, не меняющаяся во времени). В нашей ситуации процессы
можно упорядочить в соответствии со временем их запуска (“про-
буждения”). После этого можно использовать операцию minrank
для того, чтобы определить, настало ли время запуска самого пер-
вого процесса, приостановленного с помощью check; есл и это так,
то процесс получает сигнал для запуска.
Теперь не нужен цикл while в процедуре delay, но он нужен
в процедуре tick при посылке сигнала, ибо этого времени запуска
могут ожидать несколько процессов.
monitor Timer{
int tod=0;
cond check; # получает сигнал, когда minrank<=tod
procedure delay(int interval){
int wake_time;
wake_time=tod+interval;
if (wake_time>tod) wait(check, wake_time);
}
procedure tick(){
tod=tod+1;
while(!empty(check) && minrank(check)<=tod)
signal(check);
}
}
Изложенный способ (использование приоритетного оператора
wait) удобен в случае статических условий запуска процессов (не
меняющихся со временем в зависимости от работы других процес-
сов). В этих условиях он имеет явные преимущества перед “покры-
вающего условия”.
В случае нестатических условий запуска удобно применение на-
крывающего условия; более мощным средством, но менее э ффек-
тивным с точки зрения захвата ресурсов, является использование
в мониторе отдельной условной переменной для каждого условия
задержки.
29