第二章 (三)信号量

1.整型信号量(符合有限等待原则,不符合让权等待)

最初的信号量机制,两个原子操作对一个共享整型量进行操作。

信号量定义为一个整型量;

根据初始情况赋相应的值;

仅能通过两个原子操作来访问。

P操作wait(S): 

              While S<=0 do no-op;      ///signal释放资源后wait等待进程课继续执行,但是执行wait操作时,当S<=0时,程序会一直执行,又因为信号量原语不能被打断,则会陷入忙等

              S:=S-1;

V操作signal(S):

              S:=S+1;

2.记录型信号量

P操作wait()

S.value=S.value-1;

if S.value<0    then  block(S,L);    

V操作signal();

S.value=S.value+1;

if S.value<=0   then wakeup(S,L);

做题思想方法: 一般设value初始值为1,如果有两个进程P1,P2,若P1先执行,经过wait操作后value=0,P2再进行wait操作时value=-1,这时执行block方法锁住P2,然后P1继续执行,当进行signal操作时value=0,这时执行wakeup方法唤醒P2,然后P2可以继续执行自己的signal操作

3.量题目做题的一般方法:

1、分析问题,找出同步、互斥关系

2、根据资源设置信号量变量

3、写代码,并注意P、V操作

4、检查代码,模拟机器运行,然后再改代码



4.控制同步顺序的注意点:

(1)信号量值为0的点是限制的关键

(2)成对使用PV原语(在有先后关系的两个进程中),不能出现顺序上的错误以及重复或遗漏。

5.AND型信号量(用于解决进程间要求共享的资源产生的死锁问题




6.信号量集

引入原因: 每次只能获得或释放一个单位的资源,低效; 某些时候资源分配有下限的限制; 修改:在大于可分配设置的下界值t 前提下,每次可分配d个。也是在Swait()与Ssignal()中进行操作

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容