文档详情

哲学家吃饭问题实验报告计划操作系统.docx

桔****
实名认证
店铺
DOCX
39.35KB
约17页
文档ID:555471077
哲学家吃饭问题实验报告计划操作系统.docx_第1页
1/17

哲学家吃饭问题实验报告计划操作系统蝿目录1.2. 莇目与要求⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 2袂目的膁要求3.4. 芇体思想与有关知⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 2膆体思想羂描绘薂解决方案罿3.数据构、流程⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 2羅数据构肂流程羃4.源代⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ .3蒆5.运转果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ .6羈6.果剖析⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ .7膂7.及心得领会⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ .71.2. 肀目与要求膈目的螆掌握进度同步问题的解决思路及方法,娴熟使用Windows操作系统供给的信号量体制解决各样进度同步问题膂要求蒀设有五个哲学家,共用一张放有五把椅子的餐桌 ,每人坐在一把椅子上 ,桌子上有五个碗和五只筷子,每人两边各放一只筷子哲学家们是交替思虑和进餐,饥饿时便试图取其左右最凑近他的筷子条件:袀(1)只有拿到两只筷子时,哲学家才能吃饭蒅(2)假如筷子已被他人拿走,则一定等他人吃完以后才能拿到筷子节(3)随意一个哲学家在自己未拿到两只筷子吃饭前,不会放下手中拿到的筷子。

袁2.体思想与有关知芈体思想芄哲学家的生活就是思虑和吃饭,即思虑,饿了就餐,再思虑,周而复始要求是:每一个哲学家只有在拿到位于他左右的筷子后,才可以就餐;哲学家只好先拿左侧的筷子,再去拿右侧的筷子,而不可以同时去抓他两边的筷子,也不可以从其余哲学家手中强抢筷子;哲学家每次就餐后一定放下他手中的两把筷子后恢复思虑,不可以强抓住餐具不放莂设计一个程序,可以显示目前各哲学家的状态和桌上餐具的使用状况,并能无死锁的计算出下一状态各哲学家的状态和桌上餐具的使用状况即设计一个能安排哲学家正常生活的程序节问题描绘肀可能出现死锁问题,由于当五个哲学家都饥饿时,都拿着一支筷子,这样便可能五个哲学家都用不上餐芇解决方案蒁最多同意4个哲学家同时坐在桌子四周荿给所有哲学家编号,奇数号的哲学家一定第一拿左侧的筷子,偶数号的哲学家则反之蒈为了防止死锁,把哲学家分为三种状态,思虑,饥饿,进食,仅当一个哲学家左右两边的筷子都可用时,才同意他拿筷子,并且一次拿到两只筷子,不然不拿肆3.数据结构及流程图薁数据结构螀philosopherProc膀+myid:int袅+mystate:int袅+philosopherProc(LPVOIDlpParameter)+ResumeThread(hPhilosopher[i]):int膁+strcpy(stateStr,""):int蚈程序中定义一个哲学家类,包括两个私有对象和四个公有对象。

袈myid象:哲学家的号羅mystate象:用于保留目前哲学家的状,薂philosopherProc(LPVOIDlpParameter)方法:哲学家结构函数,PHILOSOPHER_NUM表示哲学家号莀ResumeThread(hPhilosopher[i])方法:返回哲学家号蚇strcpy(stateStr,"") 方法:返回哲学家目前状肅依据目要求改哲学家的状( ->餐->思虑->⋯⋯⋯⋯)羃流程图膅mystate=THINKIN;(初始状态为THINKING)腿While(先检查左筷子能否可 芅查察下一个哲学家蕿检查右筷子能否可用薀改变哲学家的状态为DINING羇放下两支筷子,改变哲学家的状态为袇4.5. 莅源代码 (c++)羁//哲学家就餐问题的解法虿#include羆#include莄#include莂#include膇#include螅#include蒄usingnamespacestd;// 命名空间std内定义的所有表记符都有效葿constunsignedintPHILOSOPHER_NUM=5;//哲学家数量衿constcharTHINKING=1;/*标志目前哲学家的状态,1表示等候,2表示获得饥饿,3表示正在吃饭*/薄constcharHUNGRY=2;薄constcharDINING=3;袀HANDLEhPhilosopher[5];//定义数组寄存哲学家莇/*HANDLE(句柄)是windows操作系统中的一个观点。

指的是一个核心对象在某一个进度中的独一索引*/薇HANDLEsemaphore[PHILOSOPHER_NUM];//semaphore用来表示筷子能否可用蚄HANDLEmutex;//Mutex用来控制安全输出芁DWORDWINAPIphilosopherProc(LPVOIDlpParameter)//philosopherProc肈{莆intmyid;螄charidStr[128];蚂charstateStr[128];蒆charmystate;肄intret;返回DWORD(32位数据)的API函数袄unsignedintleftFork;//左筷子肂unsignedintrightFork;// 右筷子芈myid=int(lpParameter);膇itoa(myid,idStr,10);羄WaitForSingleObject(mutex,INFINITE);艿cout<<"philosopher"<

10.11.羀总结及心得领会此次操作系统的作业让我深刻的领会到操作系统的知识作用培育我综合运用知识的能力,联合了c++的知识来解决这个问题稳固了从前的知识在设计这个程序的时候我碰到了好多困难,可是经过老师和同学们的帮助,我一一解决掉了并且发现了我好多学习中的不足之处,对从前学习的知识认识不够深刻,掌握的不够,这个要好好复习一下总的来说,这个操作系统的作业带给我好多收获,让我得益匪浅。

下载提示
相似文档
正为您匹配相似的精品文档
相关文档