PV操作实例精讲

PV操作实例精讲




前言

PV操作是操作系统中偏难的知识,今天用一个实例来为大家进行讲解

PV操作并发进程之间某些约束关系问题的解决

需要你记住:P代表等待/通过V代表唤醒等待/释放,叫法有许多种,请你结合自己的理解给他定义

我们不讲那么多晦涩难懂的话语,两张图+一个例子包你明白,
1616505950751

实例讲解





一 、问题,怎么管理图中进程的约束关系?

1616505950751

假如我们不对这一类问题进行PV操作,(先忽略图中红色字体)我们来看看会遇到什么问题

生产者生产了一个产品,把它放到缓冲区,没有问题

产品会一直生产吗?缓冲区的产品是否还有剩余?消费者什么时候从缓冲区取商品?这些复杂的问题其实只需要带入PV操作就可以解决


二 、解决

加入PV操作后进行分析:


先来看 生产者:(结合两张图进行分析)
1616505950751

第一次:

  • 生产者生产一个产品        执行一次P操作->此时S1进行自减(S1=1-1= 0)

  • if判断:此时S1=0 不满足<0       为false        所以继续执行将产品送到缓冲区

  • 执行V操作 ->S2进行自增(S2=0+1=1)

  • if判断:此时S2=1 不满足<=0       为false       所以继续执行下一次循环
    1616505950751

第二次:此时的状态(S1=0,S2=1)

  • 再次生产一个产品----执行一次P操作->此时S1进行自减(S1=0-1=-1)

  • if判断,此时S1=-1 满足小于S<0,为true,所以当前进程被阻塞,需要将其放到进程队列里等待,暂时不进行操作

所以我们可以知道,第二次生产的产品在第一次生产的产品还没消费完是不会加入到缓冲区的


这时候我们再来看 消费者

此时(S1=-1,S2=1)

  • 首先执行P操作,S2自减(S2=1-1=0)
  • if判断,此时S2=0,不满足S<0,为 false ,所以执行从缓冲区取出产品的操作
  • 继续执行V操作,S1自增(S1=-1+1=0)
  • if判断,此时S1=0,满足S<=0,为 true ,但要注意这时不是加入到进程队列,而是唤醒S1的进程,回到起点,如此反复继续执行P(S1)操作


PV操作的难点就是题目的灵活度非常高,理解的情况下要多刷题

你学废了吗?

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请对长亭晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值