记录型信号量---实现了“让权等待”的策略,而不存在“忙等”现象的进程同步机制。为此,在信号量机制中,除了需要一个用于代表资源数目的整形变量value外,还应增加一个进程链表L,用于链表上述的所有等待进程。
type semaphore=record
value:integer;
L:list of process;
end
相应的,wait(s)和signal(s)操作可描述为:
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
在记录型信号机制中,S.value的初值表示系统中某类资源的数目,因而又称为系统资源信号量,对它的每次wait操作,意味着进程请求一个单位的该类资源,因此描述为S.value:=S.value-1;当S.value<0时,表示该资源已分配完毕,因此该进程应调用block原语,进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。可见,该进程遵循了“让权等待”准则。此时S.value的绝对值表示在信号量链表中已阻塞进程的数目。对信号量的每次signal操作,表示执行进程释放一个单位