资源描述:
《操作系统课程设计哲学家就餐问题.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、目录摘 要3第一章课程设计的目的及要求41.1设计目的41.2设计要求41.3设计环境4第二章需求分析52.1问题描述:52.2问题分析:5第三章详细分析63.1问题定义63.2算法分析:63.3界面设计7第四章程序部分代码分析9第五章新得体会11第六章参考文献12附录1219摘 要在多道程序环境下,进程同步问题十分重要,也是相当有趣的问题,因而吸引了不少学者对它进行研究,由此而产生一系列经典的进程同步问题.其中较有代表性的是哲学家进餐问题等等,通过这些问题的研究和学习,可以帮助我们列好地理解进程同步概念及实现方法.由Dijkstra提出并解
2、决的哲学家进餐问题(TheDinningPhilosophersProblem)是典型的同步问题,该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐,平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐,进餐毕,放下筷子继续思考.由于筷子数目有限,不能让五个哲学家同时进餐,而且甚至只能让其中的少数哲学家进餐,其他的哲学家只能轮流享用,这非常类似多线程之间的同步互斥问题,所以采用windows的多线程及一些API函数实现了对这个经
3、典算法的模拟.19第一章课程设计的目的及要求1.1设计目的通过本次课设,对本学期的操作系统课程的学习理论知识的一次应用。是理论结合实际的一次应用。让我们学会对竞争资源的操作,控制,同时锻炼我们的编程水平。Ø使我们掌握多线程编程的方法;Ø掌握MFC程序设计和API应用程序编程;Ø培养我们基本控制程序的安全性及避免死锁的方法;Ø培养我们分析、解决问题的能力;Ø锻炼我们的自学能力;Ø培养我们的组队合作能力;Ø提高学生的科技论文写作能力。1.2设计要求²利用多线程编程模拟5个线程,竞争五个筷子去吃通心面;²对临界资源的操作算法要简单易行;²程序运行时不会
4、产生死锁;²对所设计的各模块系统进行调试;²独立完成程序的设计与调试;²设计好各个功能模块,合理安排他们的位置;²程序结构清晰;²程序界面友好直观。1.3设计环境Ä开发程序的操作系统:WindowsXP(在Windows7/Windows2000里也适用)Ä编译工具:visualC++6.0Ä程序工程:MFCAppWizard(exe)的对话框工程19第二章需求分析2.1问题描述:由Dijkstra提出并解决的哲学家进餐问题(TheDinningPhilosophersProblem)有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有
5、五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有他拿到两只筷子时才能进餐。进餐毕,放下筷子继续思考。2.2问题分析:经分析可知,放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用。在设计实现与演示该问题时,为了实现对筷子的互斥使用,程序中使用互斥量表示一只筷子,每一支筷子使用一个互斥量,五个筷子总共需要五个互斥量所有信号量。当哲学家饥饿时,总是先去拿他左边的筷子,成功后再去拿他右边的筷子,如果两次操作都成功便可进餐。进餐毕,先放下他左边的筷子,然后再放下他右边的
6、筷子。为了模拟实现五个哲学家的进餐情况,利用操作系统提供的多线程来模拟进程实现哲学家进餐的过程功能,其中一个为主线程,用于为要进餐的哲学家提供场所。子线程与主线程并行执行,主线程控制着它们的生成。子线程用于处理要进餐的哲学家,其功能有申请筷子、把申请到筷子的哲学家置为进餐状态、释放筷子。19第三章详细分析3.1问题定义在哲学家问题中,我们首先要对哲学家们进餐问题做一些规则,规则如下:1.互斥解决。每一把叉子使用一个2元信号量,只有获得信号量的哲学家才能使用叉子,从而避免对叉子的“抢夺”。2.死琐和饥饿解决。餐厅只允许最多4名哲学家进入,因为总有一
7、个哲学家可以得到两把叉子,从而可以正常就餐,因此不会有死琐出现。每为哲学家就餐完毕后,立即离开,放下叉子,以便没有用餐的哲学家可以使用,这也能保证不会有饥饿的存在了。3.就餐顺序随机。为了较真实地模拟现实就餐问题,哲学家每次进入餐厅的顺序总是随机的,这个随机顺序在哲学家开始进入之间通过一个函数产生4.哲学家的各种状态。思考:当哲学家没有就座的时候,该位置显示空闲状态。等待:当一个哲学家进入餐厅但是没有获得餐具就餐的时候,进入思考等待状态。吃饭中:哲学家获得餐具后开始就餐进入就餐状态。离开:哲学家就餐完毕就到了离开状态。每个哲学家的就餐过程通过一个
8、线程函数的调用来实现。主线程与子线程的通信:3.2算法分析:第一种算法::假如所有的哲学家都同时拿起左侧筷子,看到右侧筷子不可用,又都放