ВУЗ:
Составители:
71
поток блокируется, «ожидая на семафоре», при S = 0. При выполнении
операции V(S) происходит пробуждение одного из потоков, ожидающих
на семафоре S, а если таковых нет, то значение семафора увеличивается
на 1 (как можно заметить, по сути – операции P и V аналогичны функ-
циям POST и WAIT). Как следует из вышесказанного, при входе в кри-
тическую секцию поток должен выполнять операцию P(S), а при выходе
из критической секции – операцию V(S).
Процесс
блокируется до
освобождения D
Снятие блокировки со всех
процессов, ожидающих
ресурс D
Ресурс
свободен?
F(D)=1?
Нет, занят
Запрос к ресурсу D
Неделимая операция
«поверка-установка»
Да, свободен
Занять ресурс
F(D):=0
Критическая секция
(работа с ресурсом D)
Освободить ресурс
F(D):=1
WAIT(D)
POST(D)
Рисунок 19 – Работа в критической секции с использованием системных
функций WAIT(D) и POST(D)
В простом случае, когда семафор работает в режиме 2-х состояний
(S > 0 и S = 0), его алгоритм работы полностью совпадает с алгоритмом
мьютекса, а S выполняет роль блокирующей переменной.
Рассмотрим использование семафоров на классическом примере
взаимодействия двух процессов, выполняющихся в режиме мультипро-
граммирования, один из процессов пишет данные в буферный пул, а
другой считывает их из буферного пула. Пусть буферный пул состоит из
N буферов, каждый из которых может содержать одну запись. Процесс
Страницы
- « первая
- ‹ предыдущая
- …
- 69
- 70
- 71
- 72
- 73
- …
- следующая ›
- последняя »
