华中科技大学操作系统实验报告.docxVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、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

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档