操作系统——信号量机制

整型信号量

信号量定义为一个整型量    根据初始情况赋相应的值    仅能通过两个原子操作来访问

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、修改、维护困难;易读性差,任一修改都可能影响全局;测试期间发现错误困难,及时发现也不容易定位出错位置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容