整型信号量
信号量定义为一个整型量 根据初始情况赋相应的值 仅能通过两个原子操作来访问
P操作:
wait(s):
while s<=0 do no-op;
s:s-1;
V操作:
signal(s):
s:=s+1;
记录型信号量
整型信号量符合”有限等待“原则 但不符合”让权等待“原则
改进:
条件不符时应能够主动放弃
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)
信号量的基本应用
1、实现进程互斥
2、实现进程间的前驱关系(有序)
AND型信号量
出现原因:
一些应用往往需要两个或多个共享资源,而不是前述的一个资源。进程同时要求的共享资源越多,发生死锁可能性越大。
解决思想:
一次性分配给进程所需资源,用完一起释放。Wait操作时对它所有需要的资源都要判断,有AND条件,故称“AND同步”、“同时wait”。
信号量机制的不足
信号量的控制分布在多个进程中
1、正确性分析困难;
2、分散的P、V操作;易出错,使用不当可能导致死锁。
3、修改、维护困难;易读性差,任一修改都可能影响全局;测试期间发现错误困难,及时发现也不容易定位出错位置。