整型信号量
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;