p、v操作结合实例讲解

PV操作与信号灯的处理相关,P表示通过的意思,V表示释放的意思。(就这两个字母我就混乱了)

问题1一个司机与售票员的例子

  在公共汽车上,为保证乘客的安全,司机和售票员应协调工作:

  停车后才能开门,关车门后才能行车。用PV操作来实现他们之间的协调。

S1:是否允许司机启动汽车的变量
S2:是否允许售票员开门的变量
driver()//司机进程 {

while (1)//不停地循环 {
P(S1);//请求启动汽车
   启动汽车;
   正常行车;
   到站停车;
    V(S2); //释放开门变量,相当于通知售票员可以开门
  }
}


busman()//售票员进程 {

  while(1) {

   关车门;
    V(S1);//释放开车变量,相当于通知司机可以开车
    售票
    P(S2);//请求开门
    开车门;
    上下乘客;
  }
}
注意:busman() driver() 两个不停循环的函数  

 

 

问题2  图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。要几个程序?有多少个进程?(答:一个程序;为每个读者设一个进程)

 

(1)       当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞)

(2)       当图书馆中没有座位时,后到的读者不等待,立即回家。

 

解(1 )

设信号量:S=100;  MUTEX=1

P(S)

P(MUTEX)

登记

V(MUTEX)

阅读

P(MUTEX)

注销

V(MUTEX)

V(S)

 

  

解(2)

设整型变量 COUNT=100;

信号量:MUTEX=1;

P(MUTEX);

IF (COUNT==0)

{ V(MUTEX);

   RETURN;

}

COUNT=COUNT-1;

登记

V(MUTEX);

阅读

P(MUTEX);

COUNT=COUNT+1;

V(MUTEX);

RETURN;


问题有一座东西方向的独木桥;用P,V操作实现:

(1)       每次只允许一个人过桥;

(2)       当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待。

(3)       当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥。(此问题和读者与写者问题相同,东向西的为读者,西向东的为写者)。

(1)解

设信号量 MUTEX=1

P (MUTEX)

  过桥

V (MUTEX)

(2)解

设信号量: MUTEX=1 (东西方互斥)

      MD=1   (东向西使用计数变量互斥)

   MX=1   (西向东使用计数变量互斥)

设整型变量: CD=0  (东向西的已上桥人数)

        CX=0 (西向东的已上桥人数)

 

从东向西:

P (MD)

IF (CD=0)

{P (MUTEX)  }

CD=CD+1

V (MD)

过桥

P (MD)

CD=CD-1

IF (CD=0)

{V (MUTEX)  }

V (MD)

从西向东:

P (MX)

IF (CX=0)

{P (MUTEX)  }

CX=CX+1

V (MX)

过桥

P (MX)

CX=CX-1

IF (CX=0)

{V (MUTEX)  }

V (MX)

 

(3) 解:从东向西的,和(2)相同;从西向东的和(1)相同。

 

问题4 有一个俱乐部,有甲乙两个服务员,当顾客有请求时,甲负责送烟,乙负责送火,无顾客请求时,服务员睡眠。顾客自己不能带烟和火,当顾客要抽烟时,可请求服务员送烟和火,烟和火还未送到时,顾客必须等待。

设信号量:SY, SH,CY,CH:初值都为0

 

甲服务员

REPEAT

P(SY)

送烟

V(CY)

UNTIL FALSE

乙服务员

REPEAT

P(SH)

送火

V(CH)

UNTIL FALSE

顾客

V(SY)  /*(请求送烟)*/

V(SH)  /*(请求送火)*/

P(CY)  /* (等烟)  */

P(CH)  /* (等火)  */

抽烟

 

问题5一家四人父、母、儿子、女儿围桌而坐;桌上有一个水果盘;

1 当水果盘空时,父亲可以放香蕉或者母亲可以放苹果,但盘中已有水果时,就不能放,父母等待。当盘中有香蕉时,女儿可吃香蕉,否则,女儿等待;当盘中有苹果时,儿子可吃,否则,儿子等待。

解设信号量:SE=1 (空盘子);SA=0 (放了苹果的盘子);SB=0 (放了香蕉的盘子)

 

父亲

REPEAT

剥香蕉

P(SE)

放香蕉

V(SB)

UNTIL FALSE

母亲

REPEAT

削苹果

P(SE)

放苹果

V(SA)

UNTIL FALSE

儿子

P(SA)

拿苹果

V(SE)

吃苹果

 

女儿

P(SB)

拿香蕉

V(SE)

吃香蕉

 

(2) 把(1)改为:儿子要吃苹果时,请母亲放苹果,女儿要吃香蕉时,请父亲放香蕉,(还是盘子为空时才可以放)。

 

(2)解:再增加两个信号量:SF=0,SM=0

 

父亲

REPEAT

P(SF)

剥香蕉

P(SE)

放香蕉

V(SB)

UNTIL FALSE

母亲

REPEAT

P(SM)

削苹果

P(SE)

放苹果

V(SA)

UNTIL FALSE

儿子

V(SM)

P(SA)

拿苹果

V(SE)

吃苹果

 

女儿

V(SF)

P(SB)

拿香蕉

V(SE)

吃香蕉




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值