信号量及PV操作实例.docVIP

  • 141
  • 0
  • 约1.86千字
  • 约 4页
  • 2017-06-08 发布于重庆
  • 举报
信号量及PV操作实例

信号量及P、V操作练习 (进程互斥实例)某小型超级市场,可容纳50人同时购物。入口处有篮子,每个购物者可拿一只篮子入内购物。出口入结账,并归还篮子(出、入口禁止多人同时通过)。试用信号量和P、V操作写出购物物者的同步算法。 考虑:1、出、入口合一;2、出、入口分开。 ①所用信号量设置如下: Ⅰ)互斥信号量S,初值为50,用以保证最多可以有50个购物者同时进入超市。 Ⅱ)互斥信号量mutex1、 mutex2,初值为1,用以保证同时只能有一个购物者进程进入出、入口拿起篮子或者结帐后放下篮子。 ②用信号量机制给出的每个购物者购物过程的算法描述如下: 购物者进程: P(S); P(mutex1); 从入口处进超市,并取一只篮子; V(mutex1); 进超市内选购商品; P(mutex2); 到出口结帐,并归还篮子; V(mutex2); 从出口离开超市; V(S) (生产者消费者问题实例)桌上有个只能盛得下一个水果的空盘子。爸爸可向盘中放苹果和桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。 规定:当盘子空时,一次只能放入一个水果供者取用。 要求:试用信号量和P、V操作实现爸爸、儿子和女如鱼得水这三个循环进程之间的同步。 一、Ⅰ)爸爸进程的同步信号量empty,初值为1,表示盘子是空的,即儿子或女儿已把盘中的水果取走。 Ⅱ)儿子进程的同步信号量orange,初值为0,表示爸爸尚未把桔子放入盘中。 Ⅲ)女儿进程的同步信号量apple,初值为0,表示爸爸尚未把苹果放入盘中。 爸爸进程(P): 儿子进程(C1): 女儿进程(C2): P(empty); P(orange ); P(apple); 将水果放入盘中; 从盘中取出桔子; 从盘中取出苹果; 若放入的是桔子, V(empty); V(empty); 则V(orange); 吃桔子; 吃苹果; 否则,V(apple); 二、 Semaphore S 1,S1 S2 0; void father() while 1 准备苹果; wait S ; 将苹果放在盘子内; signal S1 ; void mother while 1 准备橘子; wait S ; 将橘子放在盘子内; signal S2 ; void daughter while 1 wait Sl ; 从盘子里拿走苹果; signal S ; 吃苹果; void son while 1 wait S2 ; 从盘子里拿走橘子; signal S ; 吃橘子; main cobegin father ; mother ; daughter ; son ; (读者写者问题实例)设A、B两点之间是一段东西向的单行车道,现在要设计一个AB路段自动管理系统,管理规则如下:当AB间有车辆在行驶时同方向的车可以驶入AB段,但另一方向的车必须在AB段外等待;当AB段之间无车辆行驶时,到达AB段的任一方向的车都可以进入AB段,但不能从两个方向同时驶入,即可能有一个方向的车驶入;当某方向在AB段行驶的车辆驶出了AB段且暂无车辆进入AB段时,应让另一方向等待的车辆驶入AB段行驶。试用信号量和P、V操作管理AB路段车辆的行驶。 解析: 读者-写着问题的变形。我们设置3个信号量S1、S2和Sab,分别用于从a点进入的车互斥访问共享变量ab(用于记录当前ab段上由a点进入的车辆的数量),从b点进入的车互斥访问共享变量ba(用于记录当前ab段上由b点进入的车辆的数量)和a、b点的车辆互斥进入ab段。3个信号量的初值分别为1、1和1,两个共享变量ab和ba的初值分别为0、0。 Semaphore S1 1,S2 1,Sab 1; int ab ba 0; void Pab while 1 wait S1 ; if ab 0 wait Sab ; ab ab+1; signal S1 ; 车辆从a点驶向b点; wait S1 ; ab ab-1; if ab 0 signal Sab ; signal S1 ; void Pba while 1 wait S2 ; if ba 0 wait Sab ; ba ba+1; signal S2 ; 车辆从b点驶向a点; wait S2 ; ba ba-1; if ba 0 signal Sab ; signal S2 ; main cobegin Pab ; Pba ;

文档评论(0)

1亿VIP精品文档

相关文档