信号量实现 同步&互斥 分析

18 篇文章 0 订阅
17 篇文章 0 订阅

信号量

作用

实现进程控制,实现进程的同步与互斥

本质

本质是一个计数器 + PCB等待队列计数器对资源的计数进行加1或减1操作

实现互斥同步

互斥:不同的进程,在同一时刻,只能有一个进程对临界资源进行访问
同步:保证进程对临界资源访问的合理性

实例分析

互斥的实现

是由于计数器初始化时设置为 1,即信号量表示仅 1 个资源可用,仅 1 个进程可访问临界资源

现在有进程 A 和 B 对临界资源进行访问,进程等待队列及计数器的状态如下:
在这里插入图片描述

  1. 在进程 A 对临界资源进行访问前,计数器先判断计数器中的值是否小于等于 0:
    如果不是,计数器减1进行访问,访问完成后计数器加 1;
    如果是,计数器减 1,将进程 A 加入 PCB 等待队列进行阻塞等待
  2. 当结束资源访问,直接对资源计数器进行加 1 操作,结束访问
  3. 如果有进程结束访问,判断是否需要唤醒等待队列中进程,计数器先判断计数器中的值是否小于等于 0:
    如果不是,说明等待队列中没有进程等待
    如果是,说明等待队列中有进程等待,需要唤醒等待队列进程

同步的实现

是由于信号量是一个对资源的计数器,计数器取值不限于 1 ,信号量的取值代表资源数量 + PCB等待队列

现有 1 个信号量当中的计数器值为10,把进程与资源的关系换为车与商场停车位的关系,10个车位,A,B,C 在等待中,图示如下:

在这里插入图片描述
当资源被其他进程释放或重新生产出资源计数器进行加 1 操作,判断计数器是否小于等于 0 :
如果不是,就不需要通知
如果是,通知 PCB 等待队列进程唤醒后访问

PV操作

信号量减1,P操作;信号量加 1,V操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值