- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
华中科技大学操作系统实验报告
华中科技大学电信学院操作系统实验报告电子信息与通信学院班级:电信1202班姓名:XX学号:U2012133XX时间:2014年11月5日实验一 哲学家就餐问题实验目的1.熟悉哲学家就餐问题流程,编译程序,了解程序运行过程。2.理解利用设置信号量及P、V操作解决进程间的互斥这一方法,并了解其代码实现的相关方法,提炼出代码的思想(用伪代码表示)。3.对哲学家就餐问题提出新的解决方式,并简述其实现过程。实验原理1、问题描述有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。2、分配方式方式一(不会进入死锁)仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子。这样要么一次占有两只筷子(所有线程需要的资源)进行下一步的吃通心粉,然后释放所有的资源;要么不占用资源,这样就不可能产生死锁了。方式二(会进入死锁) 当筷子(资源)可用时,先分配左边的筷子,等待一会后再分配右边的筷子,由于这个过程中,左边的筷子一直没有释放,就有可能产生死锁了。 3、程序运行说明程序运行过程中会弹出一个MessageBox提示操作者操作:1)第一个对话框用于选择运行模式a.选择yes 表示采用的是运行的防止死锁的方式,这样的话整个程序可以一直运行下去,不会产生死锁。b.选择no 表示运行产生死锁的方式会弹出第二个对话框。2)第二个对话框用于选择运行时,线程运行的时间a. 选择 res 线程时间比较短,很快就可以死锁b.选择no 线程时间跟选择yes 时候的时间差不多,产生死锁的时间稍微长一点。实验程序流程及分析PhilosopherThread函数源代码DWORD WINAPI PhilosopherThread(LPVOID pVoid){HANDLE myChopsticks[2];int iPhilosopher = (int) pVoid;int iLeftChopstick = iPhilosopher;int iRightChopstick = iLeftChopstick + 1;DWORD result;if (iRightChopstick PHILOSOPHERS-1) //筷子编号过了5就使它为0iRightChopstick = 0; //Randomize the random number generatorsrand( (unsigned)time( NULL ) * (iPhilosopher + 1) );// remember handles for my chopsticksmyChopsticks[0] = gchopStick[iLeftChopstick]; //定义哲学家的左右筷子myChopsticks[1] = gchopStick[iRightChopstick];gDinerState[iPhilosopher] = RESTING;//wants chopsticks Sleep(P_DELAY);for(;;){if (bWaitMultiple == FALSE){// Wait until both of my chopsticks are availablegDinerState[iPhilosopher] = WAITING;//wants chopsticks PostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0); result = WaitForSingleObject(gchopStick[iLeftChopstick], INFINITE);MTVERIFY(result == WAIT_OBJECT_0);gChopstickState[iLeftChopstick] = iPhilosopher;Sleep(P_DELAY/4);gDinerState[iPhilosopher] = WAITING;//wants chopsticks PostMessage(hWndMain, WM_FORCE_REPAINT,0 ,0);result = WaitForSingleObject(gchopStick[iRightChopstick], INFINITE);MTVERIFY(result == WAIT_OBJECT_0);gChopstickState[iRightChopstick] = iPhilosopher;}else{// Wait until both of my chopsticks are
您可能关注的文档
最近下载
- 2022年国家公务员考试行测试题(有答案)(地市级).pdf VIP
- CISA考试练习习题库(2025年第1部分).pdf VIP
- 基于核心素养的小学语文作业设计策略分析.docx VIP
- T_CGSS 014—2020_老年人跌倒风险综合评估规范.pdf VIP
- 选区激光熔化技术下成形件表面质量及残余应力预测方法.pdf VIP
- 机电设备安装应急处理预案.docx VIP
- 2025入党积极分子发展对象考试题库(含答案).docx VIP
- 个人简历——【标准模板】.doc VIP
- [富士康 索尼设备校正]SI-F209 Operation Manual (中文版).pdf
- 小学语文作业设计的有效策略.doc VIP
文档评论(0)