PV操作实例精讲
前言
PV操作是操作系统中偏难的知识,今天用一个实例来为大家进行讲解 |
PV操作:并发进程之间某些约束关系问题的解决
需要你记住:P代表等待/通过
,V代表唤醒等待/释放
,叫法有许多种,请你结合自己的理解给他定义
我们不讲那么多晦涩难懂的话语,两张图+一个例子包你明白,
实例讲解 |
一 、问题,怎么管理图中进程的约束关系?
假如我们不对这一类问题进行PV操作,(先忽略图中红色字体
)我们来看看会遇到什么问题
生产者生产了一个产品,把它放到缓冲区,没有问题
产品会一直生产吗?缓冲区的产品是否还有剩余?消费者什么时候从缓冲区取商品?这些复杂的问题其实只需要带入PV操作就可以解决
二 、解决
加入PV操作后进行分析:
先来看 生产者:(结合两张图进行分析)
第一次:
-
生产者生产一个产品 执行一次
P操作
->此时S1进行自减(S1=1-1= 0) -
if判断
:此时S1=0 不满足<0 为false 所以继续执行将产品送到缓冲区 -
执行
V操作
->S2进行自增(S2=0+1=1) -
if判断
:此时S2=1 不满足<=0 为false 所以继续执行下一次循环
第二次:此时的状态(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操作的难点就是题目的灵活度非常高,理解的情况下要多刷题 |
你学废了吗?