结合实际问题理解PV操作和信号量机制
来源:互联网 发布:手机连接网络摄像机 编辑:程序博客网 时间:2024/06/05 11:14
5.在公共汽车上,司机和售票员的工作流程图如下图所示。为保证乘客安全。
司机和售票员应密切配合协调工作。请用信号量来实现司机和售票员之间的同步。
设置两个信号量:S1、S2,S1表示是否允许司机启动汽车,其初值为0;S2表示是否允许售票员开门,其初值为0。问题描述如下:
Semaphoere S1=S2=0;
Void Driver( ){
While(1)
{
P(S1);
启动车辆;
正常行车;
到站停车;
V(S2)
}
Void Busman( ){
While(1){
关车门;
V(S1);
售票;
P(S2);
开车门;
}
}
Main()
Cobegin{
Driver( );
Busman( );
}
}
对于上述题目,该如何理解???
首先,提出一个疑问:
1.为什么把S1,S2的初值置为1???
2.司机的动作,受限于售票员关门之后,说明售票员掌握着V(S)操作,而司机掌握着P(S)操作。
3.同时,售票员开门的操作,受限于司机到站停车之后,说明,司机掌握着V(S)的操作,而售票员掌握着P(S)的操作
“问题:要想使司机“启动车辆”动作的执行,只有在售票员执行关门操作之后,才能执行即:“启动车辆”之前司机要询问(测试)售票员“门关上没有?”,当售票员‘关上门’回答是之后,司机听到是,才启动车辆。即:启动车辆之前要有一个P(S)操作,即:先测试”
而售票员在关上门之后,执行V(S)操作,即开锁
同样,对于售票员,只有司机停车,他才能开门。
所以在售票员售票之前一定要测试:是否“到站停车”即: P(S)
而司机到站之后,才允许开门,即司机在到站之后,执行开锁即: V(S)
通过以上分析,我们可以看出:
就是用信号量来控制动作的执行。
那么,一开始为什么设置S1=S2=0呢???
因为:
如果S1=S2=1的初值为1的话,P(S1)和P(S2)毫无意义,因为,锁一开始是开着的,所以双方都会执行。无法受到对方的约束。
而当初始值 S1=S2=0时,即在开始时,S1和S2是锁着的,只有对方开开之后,才能进入,可以实现双方的动作的先后关系。
- 结合实际问题理解PV操作和信号量机制
- 信号量和PV操作
- PV操作和信号量
- PV操作和信号量
- 信号量和PV操作
- 线程学习:1-理解PV操作和信号量
- 进程同步之信号量机制(pv操作)及三个经典同步问题
- 进程同步之信号量机制(pv操作及经典问题)
- 进程同步之信号量机制(pv操作)及三个经典同步问题
- 进程同步之信号量机制(pv操作)及三个经典同步问题
- 进程同步之信号量机制(pv操作)及三个经典同步问题
- 进程同步之信号量机制(pv操作)及三个经典同步问题
- 进程同步之信号量机制(pv操作)及三个经典同步问题
- 进程同步之信号量机制(pv操作)及三个经典同步问题
- Linux信号量PV操作
- 信号量,PV操作题目。
- 信号量PV操作
- 信号量PV操作
- PHP 标记风格
- 使用virtualbox 虚拟机在windows下安装Ubuntu后的文件夹挂载 共享文件夹挂载出错 解决
- Core Date
- 授权DNS之Cloudxns的体验
- Java object demo
- 结合实际问题理解PV操作和信号量机制
- 服务计算基础知识 UDDI SOAP WSDL特性 SOA 设计原则
- leetCode(18):Construct Binary Tree from Preorder and Inorder (Inorder and Postorder) Traversal
- 写给程序员的一封信
- IOS 开发 Objective-C 入门1
- [C++ primer]第二章笔记--变量和基本类型
- 对HOWTO_create_a_traffic_generator的更正
- 搜索帮助中根据界面条件显示实现方法一
- Java "object reference" demo