- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE 1
计算机操作系统实验报告
售票员和汽车司机的进程同步问题
设计分析
司机与售票员要协同工作:一方面只有售票员把门关好之后司机才能开车,因此售票员关好门之后要通知司机开车;另一方面,也只有司机把车停下之后售票员才能开门让乘客下车和上车,此时司机应通知售票员。汽车当前正在始发站停车让乘客上车。因此,必须设置一定的信号量来实现他们之间的同步问题。
把司机与售票员的信号量设置为全局变量,并把客车上的人数:现在人数、下车人数、上车人数设置为全局变量;设置司机与售票员各自的线程。考虑到第一站和最后一站的问题,应单独处理,故在各自的线程中分情况讨论:
由于下车的人数是随机的,设计时考虑到了人数可能会超过客车的最大上限的问题。具体的思路是下面的图示。
算法实现(源代码)
#includestdlib.h#includeiostream.h#includestdio.h#includewindows.h#includetime.h#define total_num 88 //假设汽车的最大容量为88#define total_pork 9 //总的站数int recent_num=0; //某一时刻的客车上的人数int get_on_num; //上车的人数int get_off_num; //下车的人数int pork=1; //赋初始值HANDLE SJ; //司机的信号量HANDLE SPY; //售票员的信号量int Get_random(int min, int max)
//产生一定范围的随机数,可避免下面程序的判断超出客车的最大容量问题 {?int a;?srand((int)time(0));? ? while(1){? a=rand()%(total_num+1);? if(a=min a=max) return a;?}}
//司机的线程DWORD WINAPI Thread_Driver(LPVOID Driver){?while(pork=total_num)?{? if(pork==total_pork)? {?? WaitForSingleObject(SJ,INFINITE);?? cout到达总站,欢迎您下次乘坐**路公交车endl;?? coutrecent_num名乘客到达总站endl;?? return 0;? }? else ? {?? ReleaseSemaphore(SPY,1, NULL);?? WaitForSingleObject(SJ,INFINITE);?? cout汽车启动endl;?? coutendl;? }? Sleep(1000);?}?return 0;}
//售票员的线程DWORD WINAPI Thread_Conductor(LPVOID SPY){?while(1)?{?? ? if(porktotal_pork)? {?????? ? cout这是第pork站endl;?????? ? WaitForSingleObject(SPY,INFINITE);?? if(pork==1)?? {??????? ? coutSPY开始售票endl;??????? ? get_on_num=Get_random(0,total_num-recent_num);???????? ? coutget_on_num名乘客从该站上车endl;?? ? recent_num+=get_on_num;????????? ? cout共有recent_num名乘客在公交车上endl;?? }?? else ?? {??????? ? coutSJ停好车,乘客开始上下车endl;???????? ? get_off_num=Get_random(0,recent_num);???????? ? coutget_off_num名乘客在第pork站下车endl;?? ?? Sleep(1000);?? recent_num-=get_off_num;?? coutSPY开始卖票endl;?? get_on_num=Get_random(0,total_num-recent_num);?? coutget_on_num名乘客在第pork站上车endl;?? recent_num+=get_on_num;?? cout现在共有recent_num名乘客在车上endl;?? }??? ? cout此时车上总
您可能关注的文档
- 集团公司财务制度--财务内部控制制度.doc
- 集团公司发展战略和规划管理办法(讨论稿)(1).doc
- 集团公司十二五规划纲要.doc
- 集团公司战略情报信息周报1207.docx
- 集团公司资本预算管理办法(1).doc
- 集团化转型时期-城投公司如何选择管控模式.docx
- 集团内部审计情况分析报告.doc
- 集团有限公司财务部工作流程.doc
- 集团运营管理系统(1).doc
- 计财科岗位说明书(1).doc
- 2024年云南保山龙陵县事业单位招聘紧缺专业技术人员14人历年【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年佛山市三水区南山镇综合执法协管员招考(15人)【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年亳州市人民医院招考【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年中电建铁路建设投资集团限公司校园招聘【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年云南省昭通市国土资源局昭阳区分局招聘120人历年【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年丽缙高新区下属国企业公开招聘工作人员【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年临沂市兰山区内审协会招考工作人员【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年丽水市龙泉市教师及事业单位招考【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年云南大理州住房公积金管理中心选调事业单位工作人员10人【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024年云南省大理州事业单位招聘339人历年【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
文档评论(0)