Составители:
Рубрика:
time=tod;
# никаких блокировок не требуется
# процесс лишь читает tod
}
proc delay(interval, myid) { # здесь interval>0
int waketime=tod+interval;
P(m); # закрыть семафор, если он открыт
# приостановить процесс, если семафор закрыт
[вставить (waketime, myid)
в подходящее место очереди napQ]
# очередь упорядочена по времени waketime
V(m); # открыть семафор
P(d[myid]);
# ждать пропуска = закрыть семафор для myid =
# = включен спящий режим для процесса myid
}
process Clock {
[запустить аппаратный таймер];
while(true) {
[ждать прерывания, затем
перезапустить аппаратный таймер];
tod=tod+1;
P(m); # закрыть семафор, если он не закрыт
# приостановить процесс, если он закрыт
while (tod>=[наименьшее waketime из napQ]) {
[удалить (waketime,id) из napQ];
V(d[id]);
# - разбудить спящий процесс id
# (т.е. открыть семафор для id)
}
V(m); # - открыть семафор (теперь возможно
# обслуживание других процессов)
}
}
end TimeServer
Здесь класс queue поддерживает очередь с односторонним до-
76
Страницы
- « первая
- ‹ предыдущая
- …
- 73
- 74
- 75
- 76
- 77
- …
- следующая ›
- последняя »