哲学家就餐问题分析.doc

哲学家就餐问题分析.doc

ID:49560401

大小:58.00 KB

页数:5页

时间:2020-03-02

哲学家就餐问题分析.doc_第1页
哲学家就餐问题分析.doc_第2页
哲学家就餐问题分析.doc_第3页
哲学家就餐问题分析.doc_第4页
哲学家就餐问题分析.doc_第5页
资源描述:

《哲学家就餐问题分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、操作系统实验报告竹学家就餐问题分析•问题描述:十个哲学家围在一个圆桌就餐,相邻两人间有一把刀和i把叉,只有同时拿到刀叉者才能就餐,并口每个哲学家只能从他的左边和右边拿取。•问题分析:我们设定资源是刀叉,资源可以共享,因此两个相邻哲学家之间的刀叉就是临界区,要做好临界区的加锁以实现互斥。设定进程执行为就餐,十个哲学家则有十个并发的进程。我们规定每人拿取时手中的餐具不同,山于十个哲学家之间均有一副刀叉,所以他们的资源是充足的,这就避免了大家都想拿到刀叉而又都拿不到,各并发进程不能继续向前推进的严重死锁状态

2、。但是要考虑到山于哲学家在竞争刀叉时会出现有人只拿到一•样后,左或右又无资源时,该人就会一直处于等待状态,形成死锁,影响进程的并发效率。还有当两边的人都向中间拿吋,中间的人便会因为没有资源而等待。于是再做规定:将哲学家分为三个状态,Thinking,Hungery,Eating.每人一•次拿到刀叉,否则就不拿。还要保证相邻两人不能同时就餐。简略流程图为:释放所占有的资源•实验中用到的变量:#defineN10#defineTHINKING0#defineHUNGRY1#defineEATING2#ly

3、pcdefintsemaphore;//^<示信号量intstate[N];//记录哲学家的状态(THINKING,HUNGERY,EATING)semaphoremutex=l;//公共信号量,以实现临界区互斥semaphores[N];//为每个哲学家建立一个信号量structPERSONINFOintindex;//哲学家编号Boolhand[2][2];//表示哲学家的手,TRUE表示拿到,FALSE表示空//0维是左手,1维是右手dwordthreadid;//记录每个哲学家进程的现成IDH

4、ANDLEthreadhandle;//记录每个哲学家进程的句柄};structPERSONINFOpersons[N];//记录哲学家的结构体boolknife[N];//TRUE:拿有刀,FALSE:空boolfork[N];//TRUE:拿有叉,FALSE:空//分别用knife[i-l]和knife[(i+l)%N]表示第i人左右两边的刀//分别用fork[i-l]和fork[(i+l)%N]表示第i人左右两边的刀•操作过程:每人每次同时取两物,且分别两端取得情况A:两手空空时从左(右)侧各取

5、一物情况B:两手都有物时结束线程,否则继续循环(加少量延时)•程序流程init()//初始化{for(i=0;i

6、[(i-1)%5]!=EATING)&&(state[(i+1)%5]!=EATING){state:i]=EATING;V(&s[i]);}}//当哲学家手上拿到刀或叉后,便将桌上相应位置置空//当哲学家放下刀或叉后,便将桌上相应位置置一voidchangeit(bool&hand,bool&knife,bool&fork,boolleft)p(mutex);//临界区if(!handhand[!left]knife&&fork)//桌上有刀也有叉时{knife二mno.Random(2);//拿取

7、餐具是随机的,0表示拿走,1表示没拿走if(knife==0){hand[left][O]=l;手上拿着刀fork=l;}else{hand[left][l]=l;//手上拿者叉fork=0;}}elseif(!hand[left]&&!hand[!left]&&!knife&&fork)//桌上有叉但没有刀时{handtleft][1]=1;fork=0;}elseif(!hand[left]&&!hand[left]&&knife&&!fork)//桌上只有刀时{hand[left][0]=l;k

8、nife=0;}if(!hand[left]&&hand[!left]&&knife&&fork){if(hand[!left][0]=l){hand[left][1]=1;fork=0;}if(hand[!left][1]=1){hand[left][0]=1;knife=0;}}v(mutex);voidCatchtools(structPERSONINFO*person)i=person->index;〃左于•是空并且桌上有至少有一样餐具if(!p

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

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

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