Составители:
1) вставить параметры запроса в набор pairs (т.е. учесть за-
прос);
2) освободить критическую секцию с помощью V(e);
3) заблокироваться на семафоре задержки.
В предыдущих примерах (например, в задаче о читателях и
писателях) были два условия задержки и два семафора задержки.
В данном случае у каждого процесса есть свое условие задержки,
которое зависит от его приоритета (от позиции в наборе pairs), так
что все процессы упорядочены; поэтому каждый процесс должен
ждать на своем семафоре задержки.
Если имеется n процессов, то рассматривается массив b[n] се-
мафоров с начальными значениями 0. Пусть идентификаторы id
этих процессов уникальны и значения идентификаторов находятся
во множестве {0, 1, . . . , n − 1}; тогда можно считать, что процесс с
идентификатором id приостанавливается на семафоре b[id].
В результате получим следующее решение рассматриваемой
задачи.
РЕШЕНИЕ ЗАДАЧИ РАСПРЕДЕЛЕНИЯ РЕСУРСОВ ПО
МЕТОДУ “КРАТЧАЙШЕЕ ЗАДАНИЕ”
bool free = true;
sem e = 1, b[n] = ([n]0);
# семафоры входа и задержек
typedef P = set of (int, int);
P pairs = ∅;
## INV : (pairs — упорядоченный набор∧
(free ⇒ (pairs == ∅))
request(time, id) :
P(e);
if (!free) {
[вставить (time, id) в pairs];
V(e); # снять блокировку входа
P(b[id]); # ждать возобновления процесса
}
102
Страницы
- « первая
- ‹ предыдущая
- …
- 99
- 100
- 101
- 102
- 103
- …
- следующая ›
- последняя »
