一)整型信号量
整型数
P操作(wait)原语
V 操作(signal)原语
wait(s)
while s <= 0 do no-op
s = s-1
sigal(s):
s= s +1;
注:s 小于等于0就不能使用s。
wait(s)和signal(s)都是原子操作。
只要信号量s<=0就不断测试,不满足让权等待。
(二)记录型信号量
包含两个数据项:
type semaphore = record
value:integer;
L:list of process;(L是链表,是一个阻塞队列,该队列正在等待使用资源)
end
s.value为资源信号量初始值:某类资源的数目。
(a) s.value >= 0 代表系统中可用的资源数目。
(b) s.value <=0 其绝对值代表系统中等待使用资源的进程的个数。
(c) s.value初始值为1时:只允许一个进程访问临界资源,是互斥信号量。
wait操作:申请一个单位资源。
Procedure: wait(s)
var s:semaphore = ;
begin
s.value = s.value-1;
if s.value < 0 then block(s,L)//使得正在执行的进程进入阻塞状态。
end
signal操作:释放一个单位资源
Procedure:signal(s);
begin:
s.value &