Составители:
Семафор, который может принимать только значения 0 или 1 называ-
ется бинарным семафором. Для хранения процессов, ожидающих как
обычные, так и бинарные семафоры, используется очередь[3]. При
использовании принципа FIFO (first-in-first-out – “первым вошел -
первым вышел”) первым из очереди освобождается процесс, который
был заблокирован дольше других. Ниже приводится алгоритм реше-
ния задачи взаимоисключений с использованием семафора [3].
const int n = N /* количество процессов */
semaphore s = 1 ;
void P(int i)
{
while(true)
{
wait(s);
/* критическая секция */ ;
signal(s);
/* остальной код */ ;
}
}
void main()
{
parbegin (P(1),P(2), … ,P(n)); // запуск P1,P2,...,Pn
}
Пусть имеется массив P(i),i=1,...,n процессов. Каждый про-
цесс перед входом в критическую секцию выполняет вызов
wait(s).Если s<0, процесс приостанавливается. Если s=1, то s:=0
и процесс входит в критическую секцию. Поскольку s не является
больше положительным, любой другой процесс при попытке войти в
критическую секцию обнаружит, что она занята. При этом данный
процесс блокируется и s:=-1. Пытаться войти в критическую сек-
60
Страницы
- « первая
- ‹ предыдущая
- …
- 58
- 59
- 60
- 61
- 62
- …
- следующая ›
- последняя »