PV操作—2014/10/8

    l  何为PV操作

    要想理解PV操作,首先我们得先了解两个概念:同步和互斥。

      ²  同步

      同步也就是协同完成,就是大家的目的是一样的。大家相互协调沟通的,共通完成一个目的。

    比如:下面的图


      目的就是将A仓库的货物搬到B仓库中,这需要搬运工甲与乙的共同协调与沟通,中转站满了那么甲歇会再搬,此时乙就得搬,如果空了或者不满,乙可以选择休息或者继续搬,但是目的只有一个,那就是完成整个协作。

      ²  异步,也就是互斥

      互斥:就是一个人在使用资源的时候,别的人不能同步使用。

      一个形象的例子就是千军万马过独木桥。

    也就是一次只能允许一个人通过,不可能同时两个人一起经过独木桥。

    同时还有两个重要的概念:

      Ø  临界资源

      临界资源(Criticalresource,CR):在多道程序系统环境中,各进程可以共享各类资源,但有些资源一次只能供一个进程使用。如打印机,共享变量和表格。

      Ø  临界区

      临界区(Criticalsection,CS):进程中对临界资源实施操作的那段程序。

    l  那么什么又是PV操作呢

    PV操作是实现进程同步与互斥的常用方法,PV操作包括P操作和V操作,它们都是低级通信语言,在执行期间不可为0。其中P操作表示申请一个资源,V操作表示释放一个资源。

      ²  PV操作的特点(米老师的精心讲解)

      一、   以生产者消费者为例,就是说生产者消费者均有P操作和V操作。

      二、   P操作改变的是自身(Sp,表示信号量),而V操作改变的是别人(Sv:表示信号量)。

      三、   PV操作中信号量不为0

      四、   PV操作具有原子性,也就是实现了解耦。

    下面我们来逐条说说。

    Ø  同时存在PV操作

    拿生产者和消费者来说

    我们可以看到PV操作不仅仅存在于生产者,同时也存在消费者中。

    Ø  P改变自己,V改变别人

     P操作改变的是自身(Sp,表示信号量),而V操作改变的是别人(Sv:表示信号量)。而在做P操作之前,我们需要先判断Sp-1>=0,这时我们才能执行P操作。执行完之后,V操作的作用就是将信号量的Sv加1,即Sv+1;同样在消费者中我们也要同时判断Sv+1>=0,此时执行消费者的P操作,执行之后,消费者的V操作就是将Sp信号量加人,即Sp+1;之后这样不断地进行循环,因为PV操作是一个在执行期间不间断的或者说不可分割的过程。

生产者:P(Sp-1>=0)

Then

V(Sv+1)

消费者:P(Sv-1>=0)

Then

V(Sp+1)

    Ø  米老师独特解(Pv操作信号量不可为0)

    这是怎么一回事呢?还是以生产者消费者为例

    我们知道在这个过程中,生产者消费者可用的资源数不再是1,而是多个。我们知道其实在生产者和消费者这个过程当中,生产者不可可以不断地进行生产,而消费者可以不断地消费,只要资源允许。

缓冲区是个盛放资源的地方,我们知道如果Sp<0,那么资源是不能放到缓冲区的,因为没有空间可用,同样,如果Sv<0,也是没有资源可用的,就是缓冲区没有资源可消费,但是如果消费了一个,那么就会有一个空间,Sp为负值,代表的是生产者生产的东西处于 一个等待状态,一旦有空间那么就会进入缓冲区,即使有那么一瞬间Sp为0,但是同时消费者也会立刻进行消费,生产者又会进入生产,因为PV操作是一个不间断的过程。

    生活中的实例(公交车)

    比如我们乘坐公交车时,就是一个很好的例子,公交车上的座位是有限的,但是我们知道其实坐公交的不仅仅有做的,而且有站的,只有有人下车,那么只要有等待座位的人,那个座位就会立刻被占,空着的状态很短暂,基本可以忽略,也可以说只是一个由一个人坐到另一个人坐的中间转换过程。

    12306购票(典型实例)

    想必大家都有网购车票的经历吧,就是一个典型的PV操作,米老师幽默的讲述了这一点。

想想自己的亲身经历,也是,尤其是过年回家的时候,购票,好难啊,我们都在等待人不要票,然后自己赶紧抢。我们知道售票买票就是一个PV操作,有票可买的时候我们就买,没有的话只能等着,一旦有人退票,我们肯定在刷票的时候立马抢到,排队买票就是一个PV的操作。

    Ø  Pv操作原子性,也就是实现了解耦

    以生产者消费者问题为例,均是对缓冲区的操作,但是使用PV的算法,可以把信号量看成是Sp和Sv,Sp是生产者看缓冲区的状态,而Sv是消费者看缓冲区的状态。其实他们两者都是看缓冲区的状态是否能满足自身的需求,只是两者的看法是对立的。生产者是看缓冲区是否为空,而消费者看是否为满的。

    解耦实现详见链接

       http://blog.csdn.net/han_yankun2009/article/details/8761528

       http://blog.csdn.net/hejingyuan6/article/details/8776429


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值