操作系统进程同步例题(三)汽车过桥2
题目1: 在一个只允许单向行驶的十字路口,分别有若干由东向西,由南向北的车辆在等待通过十字路口。为了安全,每次只允许一辆车通过(比如:东到西或南到北)。当有车辆通过时其它车辆必须等待,当无车辆在路口行驶时则允许一辆车(东到西或南到北) 进入。请画出能保证安全行驶自动管理系统的逻辑框图,或者用P、V操作实现正确安全驾驶自动管理系统的伪代码。
PV操作题目分析步骤:
- 关系分析。找出题目中描述的各个进程,分析它们之间的同步、互斥关系。
- 整理思路。根据各进程的操作流程确定P、V操作的大致顺序。
- 设置信号量。并根据题目条件确定信号量初值。(互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)
1、分析
允许单向行驶的十字路口,有由东向西和由南向北的车辆,每次只允许一辆车通过,分为两个进程,为互斥关系,需要互斥信号量mutex
2、伪代码
seamphore mutex = 1; //十字路口的互斥信号量 //从东到西 EastToWest() { while(1) { P(mutex); //申请通过 由东向西通过; V(mutex); //释放 } } //从南到北 SouthToNorth() { while(1) { P(mutex); //申请通过 由南向b通过; V(mutex); //释放 } }
题目2:一条小河上有一座独木桥(如图),规定每次只允许一个人过桥。现河东和河西都有相等的人数在等待过桥,为了使两边的人都有同样的过桥机会,规定某边的一个人过桥后要让另一边的一个人过桥,即两边的人交替过桥。如果把每个过桥者看做一个进程,为保证安全,可用PV操作来管理。
(1)写出应定义的信号量及其初值。
(2)假定开始时让河东的一一个人先过桥,然后交替过桥。请用适当的PV操作,达到上述管理要求。
1、分析
一条小河上有一座独木桥,河东和河西等待过桥,每次只允许一个人过桥,分为两个进程,为互斥关系,两边的人交替过桥,需要两个互斥信号量mutex1和mutex2,分别表示河东和河西两边,开始时先让河东一人先过桥,故mutex1 = 1,mutex2 = 0;
2、伪代码
seamphore mutex1 = 1; //河东信号量,开始先让河东一人先过 seamphore mutex2 = 0; //河西信号量 //从东到西 EastToWest() { while(1) { P(mutex1); //河东申请通过 由东向西通过; V(mutex2); //释放河西信号量 } } //从西到东 WestToEast() { while(1) { P(mutex2); //河东申请通过 由南向b通过; V(mutex1); //释放河西信号量 } }