Составители:
Рубрика:
# - получает сигнал, когда процессу нужен ресурс
procedure acquire(int &id){
if(avail==0) # нет доступа,
wait(free); # уход в очередь
else # есть доступ
avail=avail-1;
remove(units, id);
# - удовлетворение запроса: использован ресурс
}
procedure release(int id){
insert(units, id);
# окончание использования ресурса:
# возврат его на место
if(empty(free)) # нет очереди
avail=avail+1;
else
signal(free); # сигнал "очереднику"
}
}
СЕРВЕР РАСПРЕДЕЛЕНИЯ РЕСУРСОВ И КЛИЕНТЫ
type op_kind=enum(ACQUIRE, RELEASE);
chan request(int clientID, op_kind kind, int unitID);
chan reply[n](int unitID);
process Allocator {
int avail=MAXUNITS; set units=[начальные значения];
# units - многоэлементный ресурс,
# управляемый вставкой или удалением
queue pending; # в начальном состоянии очередь пуста
int clientID, unitID; op_kind kind;
[объявление других локальных переменных];
while (true){
receive request(clientID, kind, unitID);
if (kind==ACQUIRE) {
if (avail>0){ # удовлетворить запрос:
avail--; remove(units, unitID);
37
Страницы
- « первая
- ‹ предыдущая
- …
- 34
- 35
- 36
- 37
- 38
- …
- следующая ›
- последняя »