一般信号量集机制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一般信号量集机制交通

计算机

翟高寿

一般信号量集机制的引入

❑记录型信号量及AND信号量集机制中,wait(s)和signal(s)操作仅能对信号量施以增1和减1的操作,即每次只能获得或释放一个单位的临界资源。当一次需d个某类临界资源时,便需要

进行d次wait(s)操作,这显然是低效的。

❑此外,在有些情况下,要求当资源数量低于某一下限值时,便不予分配。故在每次分配之前,都必须测试该资源的数量是否不小于测试值t。❑基于以上两点可以对AND信号量集机制进行扩充,形成一般化的“信号量集”机制。

Swait(s 1, t 1, d 1, … , s n , t n , d n )操作 procedure Swait(s 1, t 1, d 1, … , s n , t n , d n ) Var s 1, s 2, … , s n : semphore; t 1, t 2, … , t n , d 1, d 2, … , d n : integer;

begin if s 1.value ≥ t 1 and … and s n .value ≥ t n then for i:=1 to n do s i .value:=s i .value - d i ; else blockProcessAndResetPC(s firstless ); end Var zSbG: boolean:=false; for i:=1 to n do { if (s i .value

Ssignal(s1, d1,… ,s n, d n)操作procedure Ssignal(s1, d1, … , s n , d n) Var s1, s2, … , s n : semphore;

d1, d2, … , d n : integer;

begin

for i:=1 to n do

s i.value:=s i.value + d i;

wakeup(s i.L);

endfor;

end

一般信号量集的几种特殊情况

❑Swait(s, d, d)

信号量集中只有一个信号量,但它允许每次申请d个资源;当现有资源少于d个时,便不予分配

❑Swait(s, 1, 1)

此时的信号量集已退化为一般的记录型信号量❑Swait(s, 1, 0)

一种特殊且很有用的信号量,相当于可控开关

当s 1时,允许多个进程进入某特定区;当s变为0后,将阻止任何进程进入该特定区

知行合一,

开拓进取!

一般信号量集机制■

相关文档
最新文档