资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验一在 WRK 下司机售票员同步 (进程 / 线程同步)实验一 问题描述:汽车司机与售票员之间必须协调工作:一方面只有售票员把车门关好了司机才能开车,因此,售票员关好车门应该通知司机开车:另一方面,只有当汽车已经停下, 售票员才能开门上下客,故司机停车后应通知售票员。 汽车当前正在始发站停车上客,设置必要的信号量并赋初值,写出他们的同步过程。在公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆正常运行到站停车售票员的活动:关车门售票开车门在汽车不断的到站,停车,行驶过程中,这两个活动有什么同步关系?用信号量和,操作实现在实现同步过程以后, 通过实际观察 Windows中线程的同步运行过程进一步理解同步的概念、原理和实现方法。二 同步过程理论分析Windows系统的线程状态图如下:可以看到 windows 中的状态转换过程。设置信号量 S1与 S2分别是司机与售票员的私用信号量, 初值都为 0,则司机与售票员同步的过程描述为:2. 综上所述,两个进程的同步模型为:三编程实现时间控制函数:P(Semaphore /P 操作,用于控制每一个步骤的时间,时间控制函数,线程同步void P(Semaphore if(s !process 813a4848 2 截图如下:由上图可见,此时进程中存在3 个线程,主线程,司机线程以及新产生的售票员线程。五结论分析通过这个应用程序的学习,利用多线程应该程序实现同步过程,掌握其中的系统调度原理与过程,基本上了解与掌握了线程的创建,终止与同步过程,掌握了进程调度。在实验中,通过观察线程的运行状态以及一些命令在windg 中的实用,熟悉了这些命令的使用, 让自己更加了解了线程之间的相关知识。通过这个实验, 也让自己加深了对操作系统的了解,对学习操作系统以及其他相关课程有很大的帮助,虽然还是停留于比较浅的地步,但是也觉得是一个进步,以后如果还有这些机会,一定会更加努力的学习,加强这方面的知识。六附录(源代码附录)#include #include #include #define WAIT Sleep(1000)/动作间隔的时间using namespace std; / 信号量typedef int Semaphore;/信号量数据类型定义/ 变量定义HANDLE hDriver;/ 司机线程的句柄HANDLE hBusman;/ 售票员线程的句柄DWORD dwDriverId, dwDriverParam = 1; DWORD dwBusmanId, dwBusmanParam = 1; Semaphore run = 0; Semaphore stop = 0; Semaphore action = 1; typedef int Semaphore; / 用于线程同步void P(Semaphore void V(Semaphore void P(Semaphore if(s0) SuspendThread(hT); void V(Semaphore if(s=0) ResumeThread(hT); void DriverStartup();/司机启动void DriverRun();/司机行车void DriverStop();/司机停车void BusmanUp();/售票员上客void BusmanClose();/售票员关门void BusmanSell();/售票员售票void BusmanOpen();/售票员开门void BusmanDown();/售票员下乘客/ 与上述相符的具体动作void DriverStartup() P(action,hDriver); cout“Driver:Startup.“endl; WAIT; V(action,hBusman); void DriverRun() P(action,hDriver); cout“Driver:Run.“endl; WAIT; V(action,hBusman); void DriverStop() P(action,hDriver); cout“Driver:Stop.“endl; WAIT; V(action,hBusman); void BusmanUp() P(action,hBusman); cout“Busman:People up.“endl; WAIT; V(action,hDriver); void BusmanClose() P(action,hBusman); cout“Busman:Close door.“endl; WAIT; V(action,hDriver); void BusmanSell() P(action,hBusman); cout“Busman:Sell ticket.“endl; WAIT; V(action,hDriver); void BusmanOpen() P(action,hBusman); cout“Busman:Open door.“endl; WAIT; V(action,hDriver); void BusmanDown() P(action,hBusman); cout“Busman:people down.“endl; WAIT; V(action,hDriver); / 线程回调DWORD WINAPI Driver( LPVOID lpParam ) /Driver线程回调函数 do P(run,hDriver); DriverStartup(); DriverRun(); DriverStop(); V(stop,hBusman); while(1); return 0; DWORD WINAPI Busman( LPVOID lpParam ) do BusmanUp(); BusmanClose(); V(run,hDriver); BusmanSell(); P(stop,hBusman); BusmanOpen(); BusmanDown(); while(1); return 0; int main() hDriver=CreateThread(NULL,0,Driver, hBusman=CreateThread(NULL,0,Busman, _getch(); return 0;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号