P、V操作举例

图书馆可以容纳1000人就读,进入登记,离开登记。

答:1)编写一个程序,每一个读者就是一个进程,因此有多少读者就有多少进程

2)设置信号量:

共有信号量R:用于登记表的互斥操作,初值为1

私有信号量S:用于读者之间的同步操作,初值为1000

P-reader
P(s)
P(R)
在登记表上登记
V(R)
进入图书馆读书
P(R)
撤销登记信息
V(R)
V(S)
离开

 

用p、v操作解决司机与售票员的问题

司机进程:

 

while(true){
启动车辆
正常驾驶
到站停车
}

售票员进程:

while(true){
关门
售票
开门
}

Run=0,stop=0(售票员优先)
P(run)         上乘客
启动车辆      关车门
正常驾驶      v(run)
到站停车     售票
V(stop)        p(stop)
        开车门,下乘客

 

水果问题。

  卓上有一个空盘子,盘子内只允许放一个水果,甲可向盘子内放苹果,乙可向盘子内放橘子。丙专等吃盘子内的苹果,丁专等吃盘子内的橘子,若盘子内已有水果,放者必须等待,若盘子内没有自己要吃的水果,吃者必须等待。

1)请给出四个人之间的同步与互斥关系

2)用p v操作来协调四人的关系,并给出应设置的信号量及其初值。

1)由题意可知:甲、乙互斥使用盘子,甲、丙要同步,乙、丁要同步。

2)信号量的设置如下:

S表示盘子的容量,初值为1.S1为甲与丙的同步信号量,初值为0;s2为乙、丁的同步信号量,初值为0.同步算法如下:

 

 

独木桥问题:一座独木桥,河的两笔爱你都有人要过桥,按照下面的规则过桥:向一方向的可连续过桥,某方向有人过桥时另一方向的人要等待。

为了保证过桥安全,请用PV操作分别实现正确的管理。

 

解:由于两个方向的人不同时过桥,因此可定义一个信号量S(初值为1)以实现不同方向的人互斥过桥,但同一方向的人可连续过桥。显然可以用计数器表示第一个过桥者和同方向的欲过桥者是否都以过桥,当然对两个方向的过桥者分别用两个不同的计数器rc1,rc2表示,初值为0.两个计数器分别由两个方向的过桥者共享,因此在访问计数器时也应互斥,为此,引入两个互斥信号量s1,s2,初值为1.

 

 

 

 

 

 

 

 

 

posted @ 2020-04-09 21:25  ice--cream  阅读(1364)  评论(0编辑  收藏  举报