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