操作系统——pv之道

来源:互联网 发布:杭州淘宝开店培训 编辑:程序博客网 时间:2024/06/05 08:20

       我们的生活每天都有很多的事情发生,大部分事情我们可以自行处理,有些事情我们就要和其他人合作,比如去饭馆吃饭,饭馆是我们的一个经常光顾的地方,但是我们往往会碰到这样的情况,附近只有这一家饭馆,我很饿,不想去别的饭馆,刚刚我来的时候没有了位置,服务员让我等,看到别人在那吃得满嘴流油,恨啊……

       刚刚的场景,很生活,我们不妨让时间暂停在上面那句话的时刻,我们来看这个可不可以解释pv操作,首先我们定义,饭馆有3张桌子,饭馆的经营情况是只有一个厨师,来的客人不定,在厨师的案面上放着要做几个菜,客人点菜由客人自己保管(小票),厨师念号,告诉他做什么!

       我们这么定义,厨师做几个菜是厨师的信号为Sc,客人看到饭馆剩几个座位是客人的信号Sp。

上午9点,饭馆里没有一个客人,刚好有个客人来,还没有点菜

Sc=0

Sp=3


客人点了一个菜

Sc=1

Sp=2


上午11点,客人坐满,没有人等着,所有客人都点菜了

Sc=3

Sp=0


上午11:30,客人饱满,有三个客人等着,客人点菜还没上

Sc=3

Sp=-3


       这时候我们再解释pv,p操作是看看有没有资源,对于厨师是看看有没有人要做饭,对于顾客是看看还有几个位置;v操作是,有一个顾客吃完饭了,释放了一个位置,对于厨师要判断要不要做饭,有人等着,就要做,没有人等着,就等待。

       程序的厨师设置为

Sc=0

Sp=3


       厨师的代码是

p(Sc):看看要不要做饭

       做饭+送饭

v(Sp):通知顾客吃饭


       顾客的代码:

p(Sp):看看我能吃饭吗?

       点菜+吃完

v(Sc):通知厨师有一个空位置


       这里我们理解pv操作的意义,饭馆使我们的一个公共资源,我们要向好好的利用它,就要有排队,顾客排队点菜,厨师排队做饭,这样我们就和谐了,如果只有一个桌子厨师做了顾客才能吃,是合作的关系,也叫同步,如果饭馆就剩一个位置了,来了两个顾客,他两打起来了,这就叫互斥!所以pv操作是解决公共资源利用的问题,就是临界区的问题!希望大家能稍微理解!