з

К предыдущей странице

л

К предыдущей главе

о

К следующей главе

и

К следующей странице


4.3.2. Универсальный семафор (считающий семафор)

Универсальный семафор - это пара операций - примитив и аргумент-семафор, имеющий диапазон целых чисел.

Числовые семафоры могут принимать отрицательные значения: если S отрицательно, то |S| - это число процессов, заблокированных по S (рис. 15).


P(S):
  • запрет прерываний
  • S:=S-1
  • IF (S<0)

V(S):
  • запрет прерываний
  • S:=S+1
  • IF (S<=0)
                     
  • блокировать процесс по S
  • выбрать другую задачу
                    
  • деблокировать любой процесс, ожидающий S
 
 
  • FI
  • разрешить прерывание
 
 
  • FI
  • разрешить прерывание

Начальное значение S - количество процессов, которые могут пройти семафор до первой операции V(S) (например у двоичного - начальное значение S=1).


Рис. 15. Пример временной диаграммы считающего семафора
(1 ресурс, семафор - S, 5 процессов)

Выводы: на приведенных выше примерах мы рассмотрели варианты решения проблемы взаимного исключения процессов, но взаимная блокировка невозможна, т.к. процессы, пытающиеся использовать CS, будут выполняться последовательно, когда S=1.


з

К предыдущей странице

л

К предыдущей главе

о

К следующей главе

и

К следующей странице