第二章 (三)信号量

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()中进行操作

你可能感兴趣的:(第二章 (三)信号量)