Составители:
Будем рассматривать семафор как переменную, принимающую
целые значения, над которой определены три операции:
1. Семафор инициализируется неотрицательным значением.
2. Операция wait уменьшает значение семафора. Если это значе-
ние становится отрицательным, процесс, выполняющий опера-
цию wait , блокируется.
3. Операция signal увеличивает значение семафора. Если это
значение становится отрицательным, то заблокированный опе-
рацией wait процесс деблокируется.
Ниже приводится алгоритм определения семафорных примитивов [3].
struct semaphore {
int count ;
queueType queue ;
}
void wait (semaphore s)
{
s.count-- ;
if (s.count < 0)
{
Поместить процесс P в s.queue и заблокировать его
}
}
void signal (semaphore s)
{
s.count++ ;
if (s.count < = 0)
{
Удалить процесс P из s.queue и разблокировать его,
т.е. поместить P в список активных процессов.
}
}
59
Страницы
- « первая
- ‹ предыдущая
- …
- 57
- 58
- 59
- 60
- 61
- …
- следующая ›
- последняя »