哲学家就餐问题报告_第1页
哲学家就餐问题报告_第2页
哲学家就餐问题报告_第3页
哲学家就餐问题报告_第4页
哲学家就餐问题报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告实验名称:哲学家就餐问题班级:信卓1201班姓名:钟远维学号:U日期:2014年10月30日一、 实验目的1、熟练使用VC6.0编译环境,调试并正确运行程序。2、理解哲学家就餐问题中出现的问题,进而掌握死锁的必要条件。3、理解源程序中产生和防止死锁的算法,及相关窗口操作。4、熟悉哲学家就餐问题流程并写出其伪代码二、 实验内容有五个哲学家围坐在一圆桌旁(如图1),桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。 图1 图2三、 实

2、验要求1、 程序需有防止死锁发生采取的措施;2、 程序要有产生死锁的分配方式;四、 实验算法实现1、 不发生死锁的方式由源码 gChopstickStateiLeftChopstick = iPhilosopher; gChopstickStateiRightChopstick = iPhilosopher;知基本思路是要么一下子占用两支筷子要么不占用,先确定两只筷子均没被占用才获取筷子,这样就打破了死锁的必要条件。伪代码如下; var mutexleftchopstick,mutexrightchopstick; beging: resting; waiting; p(mutexleftch

3、opstick); /先改变左手筷子信号量 p(mutexrightchopstick); /马上改变右手筷子信号量 GetResource(leftchopstick,rightchopstick); /同时占用左右手筷子 eating; v(mutexleftchopstick); /释放资源 v(mutexrightchopstick); end2、 发生死锁的方式基本思路是有筷子即占用,看似效率很高,但因为资源有限,且不可抢占,很容易发生死锁。源码理解: gDinerStateiPhilosopher = WAITING;/wants chopsticks result = WaitF

4、orSingleObject(gchopStickiLeftChopstick, INFINITE); gChopstickStateiLeftChopstick = iPhilosopher; /得到左手筷子 Sleep(P_DELAY/4); /休眠状态 gDinerStateiPhilosopher = WAITING; /继续等待另一只手筷子 result = WaitForSingleObject(gchopStickiRightChopstick, INFINITE); gChopstickStateiRightChopstick = iPhilosopher; /直到等到右手筷子

5、伪码书写:var mutexleftchopstick,mutexrightchopstick; beging: resting; waiting; p(mutexleftchopstick); /改变左手筷子信号量 GetResource(leftchopstick); /获取左手筷子 p(mutexrightchopstick); /改变右手筷子信号量 GetResource(rightchopstick); /获取右手筷子 eating; v(mutexleftchopstick); v(mutexrightchopstick); end五、 实验运行结果 程序界面说明:通过位图句柄画演

6、示的界面1先画桌子,再画筷子,再画盘子,2再画哲学家:哲学家用圆表示,根据哲学家的状态选择画笔(为resting 状态时为绿色圆圈,为等待或者,就餐时为红色圆圈)3最后画哲学家的手:判断的依据是若筷子的编号和哲学家的编号一直致,那么认为这根筷子属于这个哲学家(筷子资源空闲)那么可以画手表示哲学家获得了这个筷子。(获得资源)六、 实验总结通过本次实验,程序设计的时候应该有适当的避免死锁的产生的算法程序。当避免死锁产生算法不完美时,有锁死产生的时候的死锁分配方式。这些都是在程序设计的时候应该先想好的。通过实践总结,有以下三种方法可以避免一类死锁。一是至多允许4位哲学家同时吃通心面;二是奇数号哲学家先取左边叉子,再取右边叉子;偶数号哲学家先取右边叉子,再取左边叉子;三是每位哲学家取到手边的两把叉子才开始吃通心面,否则一把叉子也不取。本次实验在已给源码的基础上我们主要是理解C语言程序并提高伪代码书写能力;所以第一步是要弄懂这个哲学家就餐问题的算法思路,然后结合课堂上老师对伪代码算法的讲解,我们将思路用伪码总结出来。从这次实验中,我们的另一个收获是对同一个问题的多方向思考。从代码中可以看出不同的分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论