Составители:
free = false;
[предоставление ресурса];
V(e); #снимается блокировка, т.к. free == false
# [остальные процессы тоже могут попытаться]
# [попасть в pairs]
release( ) :
P(e);
free = true;
if (P! = ∅) {
[удалить первую пару (time, id) из pairs];
V(b[id]); # передать эстафету процессу
# с идентификатором id
}
else V(e);
Определение. Семафор называется частным, если операция P
над ним выполняется лишь одним процесс ом.
Замечание 3. Семафоры b[i] предыдущего примера являются
частными.
Замечание 4. В некоторых случаях число условий задержки
меньше, чем число процессов: так происходи т, когда порядок удо-
влетворения запросов не важен (см. задачу о читателях и писате-
лях). В этом случае экономнее использовать меньшее количество
семафоров по сравнению с числом процессов: достаточно приме-
нить столько же семафоров, сколько имеется условий задержки (к
ним, конечно, добавляется семафор e входа в критическую секцию).
Если ресурс состоит из ряда элементов, а процесс может затре-
бовать amount таких элементов, то можно изменить предыдущее
решение следующим образом:
1) введем параметр amount в операции request и release;
2) булеву переменную free заменим целочисленной переменной
avail для хранения кол иче ства доступных элементов;
3) в request вместо !free будем проверять условие amount >
avail (число затребованных элементов больше числа доступных).
103
Страницы
- « первая
- ‹ предыдущая
- …
- 100
- 101
- 102
- 103
- 104
- …
- следующая ›
- последняя »