整型信號量
1.兩個進程互斥訪問一個臨界資源 信號量s 初始值爲 1
var s integer
wait(s) //用於申請資源
{
while s<=0 do no-op;
s=s-1
}
signal(s) //用於釋放資源
{
s=s+1
}
進程p1
p1 {
wait(mutex);
counter= counter+1;
signal(mutex);
}
進程2
p2 {
wait(mutex);
counter= counter+1;
signal(mutex);
}
2 進程p2必須在p1結束後執行 信號量s 初始值爲0
begin
p1;//p1操作互斥資源
signal(s)
;end;
begin
wait(s);
p2;//p2操作互斥資源
end
3 進程p1 p2 p3 順序執行
p1的信號量s1 初始值爲0
p2的信號量s2 初始值爲0
p3的信號量s3 初始值爲1
p1
{
wait(s3)
singal(s1)
}
p2
{
wait(s1)
singal(s2)
}
p3
{
wait(s2)
singal(s3)
}
記錄型信號量
數據類型
Type semaphore=record
Value:integer //資源數量
L:list of process //阻塞隊列
procedure wait(s)
var s:semaphore;
begin
s.value=s.value-1;
if s.value <0 then block(s.L);
end;
procedure signal(s)
var s:semaphore;
begin
s.value=s.value+1;
if s.value <=0 then wakeup(s.L);
end;