课程设计哲学家就餐问题

课程设计哲学家就餐问题

ID:9936024

大小:537.50 KB

页数:0页

时间:2018-05-16

课程设计哲学家就餐问题_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《课程设计哲学家就餐问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、操作系统课程设计报告院(系):计算机科学学院专业:计算机科学与技术专业学生姓名:李海军  班级:__计本(2)班_ 学号:5题目:模拟仿真"哲学家进餐"问题的解决过程及方法起讫日期:2010.6.30----2010.7.11指导教师:何珍祥完成日期:2010年7月10日18目录1.设计题目与要求21.1实验目的21.3初始条件22总体设计思想及相关知识32.1总体设计思想32.2临界区互斥编程原理32.3开发环境与工具43数据结构与模块说明43.1数据结构43.2程序各模块流程图63.2.1主程序模块63.2.2状态改变模块73.

2、2.3返回哲学家状态模块83.2.4返回餐具状态模块94.源程序代码105.测试及结果156.课设总结17参考文献18181.设计题目与要求1.1实验目的通过实现哲学家进餐问题的同步,深入了解和掌握进程同步和互斥的原理。1.2设计要求哲学家有N个,也定全体到达后开始讨论:在讨论的间隙哲学家进餐,每人进餐时都需使用刀、叉各一把,所有哲学家刀和叉都拿到后才能进餐。哲学家的人数、餐桌上的布置自行设定,实现刀和叉的互斥使用算法的程序实现。1.3初始条件(1)操作系统:windows(2)程序设计语言:C++(3)设定圆桌上有六个哲学家,三对

3、刀叉,如下图摆放:图1-1哲学家进餐问题设定图182总体设计思想及相关知识2.1总体设计思想哲学家的生活就是思考和吃饭,即思考,就餐,再思考,往复循环。要求是:每一个哲学家只有在拿到位于他左右的刀叉后,才能够就餐;哲学家只能先拿一把刀或叉,再去拿另一把刀或叉,而不能同时去抓他旁边的两把餐具,也不能从其他哲学家手中抢夺餐具;哲学家每次就餐后必须放下他手中的两把餐具后恢复思考,不能强抓住餐具不放。设计一个程序,能够显示当前各哲学家的状态和桌上餐具的使用情况,并能无死锁的推算出下一状态各哲学家的状态和桌上餐具的使用情况。即设计一个能安排哲

4、学家正常生活的程序。为哲学家设计3种状态,即“等待”“进餐”“思考”。每个哲学家重复进行“等待”->“进餐”->“思考”的行动循环。其中:“等待”->“进餐”:只有一个哲学家处于等待进餐状态,且左右手两边的餐具都处于“空闲”状态时,可以发生这种状态改变。此状态改变发生后,哲学家拿起左右手两边的餐具。“进餐”->“思考”:此状态改变发生后,哲学家放下左右手上的餐具。餐具状态由“使用中”转变为“空闲”。“思考”->“等待”:哲学家思考结束后,无条件转入等待状态。由上所述,程序中应设置6个元素的信号量数组,tools[6],用来保持哲学家

5、之间的同步。2.2临界区互斥编程原理不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。每个进程中访问临界资源的那段代码称为临界区(CriticalSection)。每个进程中访问临界资源的那段程序称为临界区(Critical18Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。本程序主要使用了EnterCriticalSection(&cs)和LeaveCriticalSec

6、tion(&cs)两个函数实现临界区互斥。EnterCriticalSection(&cs)用来进入临界区,LeaveCriticalSection(&cs)用来离开临界区。2.3开发环境与工具系统平台:WINDOW环境实现语言:C++开发工具:VC++6.03数据结构与模块说明3.1数据结构Philosopher-number:int-status:int+Philosopher(innum:int)+find()const:int+getinfo()const:int+Change():void图3-1哲学家类的UML图程序中定

7、义一个哲学家类,包含两个私有对象和四个公有对象。Number对象:哲学家的编号。Status对象:用于保存当前该哲学家的状态,0表示正在等待(即处于饥饿状态)1表示得到餐具正在吃饭,2表示正在思考18Philosopher(intnum)方法:哲学家类构造函数,参数num表示哲学家编号find()const方法:返回该哲学家编号getinfo()const方法:返回哲学家当前状态Change()方法:根据题目要求改变哲学家的状态(等待->进餐->思考->等待…………)另外,程序中包含一个公有对象,bool类型数组tools[6],用

8、来保存6把餐具当前状态:true表示该餐具当前空闲,false表示该餐具当前正被使用。程序中还包含两个公有函数:print和toolstatus。Print用来返回一个哲学家的状态,toolstatus用来返回一个餐具的状态。183.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。