Технология программирования для распределенных параллельных систем. Демьянович Ю.К - 19 стр.

UptoLike

попал в очередь), а если s>0, то вызов этой процедуры ведет к
уменьшению s на единицу.
Вызов процедуры Vsem приведет к увеличению s на единицу
и посылке сигнала на условную переменную pos, который воспри-
нимается как сигнал к запуску очередн ого (п ервого в очереди на
канале pos процесса).
В случае стратегии “сигнализировать и продолжить” (SC) про-
должается выполнение сигнализирующего процесса, а очередной
канале pos) процесс готовится к захвату позиций (это произойдет
после окончания сигнализирующего процесса).
В случае стратегии “сигнализи ровать и ждать” (SW) происходит
переход вызвавшего процесса в состояние ожидания, а очередной
процесс (пер вый в очереди pos) захватывает ресурс и выполняется
сразу, уменьшая зн ачения семафора s.
Замечание. При стратегии SC запускаемый процесс должен пе-
репроверить значение s семафора и убедиться, что оно все еще по-
ложительно: это необходимо делать, поскольку в период времени с
момента посылки сигнала до окончания вызвавшего процесса мо-
жет другой процесс из очереди входа вызвать процедуру Psem и
уменьшить s.
Приведем другой вариант представления семафора с помощью
монитора.
monitor FIFOsemaphore {
int s=0;
cond pos;
procedure Psem() {
if (s==0)
wait(pos);
else
s=s-1;
}
procedure Vsem() {
if (empty(pos))
s=s+1;
else
signal(pos);
}
20