编程实现司机与售票员问题 C++
设公共汽车上,司机和售票员的活动分别是:
司机的活动:启动车辆;正常行车;到站停车。
售票员的活动:关车门;售票;开车门。
在汽车不断的到站、停站、行驶过程中,用信号量和P,V操作实现它们的同步。
分析:在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客下车。因此司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。
在本题中,应设置两个信号量s1、s2,s1表示是否允许司机启动汽车,其初值为0;s2表示是否允许售票员开车门,其初值为0。这两个活动的同步用P,V原语描述如下:
Semaphore s1,s2=0;
Main()
{
cobegin
driver();
busman();
coend
}
Driver() busman()
{ {
while(true) while(true)
{ {
p(s1); 关车门;
启动车辆; v(s1);
正常行车; 售票;
到站停车; p(s2);
v(s2); 开车门;
} 上下乘客;
} }
}
司机的活动:启动车辆;正常行车;到站停车。
售票员的活动:关车门;售票;开车门。
在汽车不断的到站、停站、行驶过程中,用信号量和P,V操作实现它们的同步。
分析:在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客下车。因此司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。
在本题中,应设置两个信号量s1、s2,s1表示是否允许司机启动汽车,其初值为0;s2表示是否允许售票员开车门,其初值为0。这两个活动的同步用P,V原语描述如下:
Semaphore s1,s2=0;
Main()
{
cobegin
driver();
busman();
coend
}
Driver() busman()
{ {
while(true) while(true)
{ {
p(s1); 关车门;
启动车辆; v(s1);
正常行车; 售票;
到站停车; p(s2);
v(s2); 开车门;
} 上下乘客;
} }
}
...全文
相关推荐
进程同步模拟设计--司机和售票员问题
在这个问题的解决方案中,可能会使用到C++编程语言(如sjspy.cpp文件所示),通过编程实现这些理论概念,以达到实际的模拟效果。
司机与售票员的进程同不问题
在给定的实验“司机与售票员的进程同步问题”中,我们将模拟一个简单的场景,其中两个进程分别代表司机和售票员,他们在汽车运行过程中需要协同工作。首先,我们需要理解什么是进程。
司机售票员PV操作MFC程序模拟
总的来说,这个实验旨在通过MFC实现司机售票员的PV操作模拟,帮助理解并发编程中的资源管理和同步。通过实践,你可以更深入地了解MFC的类库使用以及信号量在解决并发问题中的关键作用。
操作系统同步实验--司机和售票员问题
该问题旨在模拟公交车运营中的司机和售票员之间的协作过程,涉及进程间的同步与互斥机制。主要考察学生对进程同步理论的理解以及实际编程能力。
售票员与司机进程同步
总结来说,"售票员与司机进程同步"是一个生动的并发编程示例,它通过模拟现实生活中的场景,帮助我们理解和掌握操作系统中进程同步的重要性和实现方式,对于提升我们的并发编程能力具有很大价值。


.NET Framework
