一般信号量集机制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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后,将阻止任何进程进入该特定区 知行合一, 开拓进取! 一般信号量集机制■