操作体统实验报告.doc

操作体统实验报告.doc

ID:57651934

大小:33.50 KB

页数:6页

时间:2020-08-30

操作体统实验报告.doc_第1页
操作体统实验报告.doc_第2页
操作体统实验报告.doc_第3页
操作体统实验报告.doc_第4页
操作体统实验报告.doc_第5页
资源描述:

《操作体统实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、中山大学南方学院实验报告课目:操作系统姓名:陈瑞全班级:08级电子一班指导老师:梁路哲学家就餐问题一、实验题目:解决五个哲学家就餐问题二、设计内容:三、开发环境:四、分析设计:1.给五个哲学家编号为1,2,3,4,5;产生一个1~5之间的随机数,规定一次产生两个哲学家;2.设置一个全局变量,将上一次产生的信号量纪录在内,并判断此次与上次的编号是否相差2或3;若是,即可同时吃,并释放上一个哲学家的筷子,若不是,只释放上一个哲学家的筷子。3.作N次循环(N自己输入)五个哲学家围坐在一圆桌旁,桌中央有一盘菜,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃菜.为了吃

2、菜每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子#defineN5voidphilosopher(inti){while(true){思考;取fork[i];取fork[(i+1)%5];进食;放fork[i];放fork[(i+1)%5];}}为防止死锁发生可采取的措施:最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次拿到两只筷子,否则不拿. 哲学家就餐问题解法(1)#def

3、ineN5voidphilosopher(inti){while(true){思考;取fork[i];取fork[(i+1)%5];进食;放fork[i];放fork[(i+1)%5];}}哲学家就餐问题解法(2)#defineN5#defineTHINKING0#defineHUNGRY1#defineEATING2#typedefintsemaphore;intstate[N];semaphoremutex=1;semaphores[N];voidtest(inti){if(state[i]==HUNGRY)&&(state[(i-1)%5]!=EATING)&&(state[(i+1)%

4、5]!=EATING){state[i]=EATING;V(&s[i]);}}voidphilosopher(inti){while(true){思考;P(&mutex);state[i]=HUNGRY;test(i);V(&mutex);P(&s[i]);拿左筷子;拿右筷子;进食;放左筷子; 放右筷子;P(&mutex)state[i]=THINKING;test([i-1]%5);test([i+1]%5);V(&mutex);}}state[i]=THINKINGs[i]=0为每个哲学家使用POSIX线程(pthread)建立独立的线程(有独立的id),用互斥(叉子其他哲学家使

5、用时,另一个哲学家不能使用)和条件(哲学家饿了才尝试去得到叉子,得到相邻的左右两把叉子才能进餐)来分到叉子。关键事件:1.哲学家饿了就要尝试去得到叉子。2.哲学家得到相邻的左右两把叉子才可以进餐3.吃完了就要释放两把叉子编程思路a)初始化各个哲学家的状态为Thinking,餐桌上的餐具都在桌上.b)通过单击Caption为Change的Button控件来改变其对应的哲学家的状态.单击的先判断该哲学家当前的状态.i.当哲学家当前状态为Thinking时,检查其左右的餐具是否空闲(其Visible属性为False时则忙,否则为空闲),如果餐具为空闲,则改变该哲学家的状态为Eating,并改变其左右

6、的餐具(置两个Shape的Visible属性为False,下同);如果餐具为忙,则改变该哲学家的状态为Waiting(启动与该哲学家相对应的Timer控件).ii.当哲学家当前状态为Eating时,改变哲学家的状态为Thinking,并放下其手中的餐具(置其左右两个Shape控件的Visible属性为True,下同).iii.当哲学家当前状态为Thinking时,提示操作者哲学家当前状态为Thinking,得不到餐具不能进入Eating状态.不改变哲学当前状态.c)Timer控件的工作原理.Timer控件主要用于,当哲学家要从Thinking状态进入Eating状态时,发现其左右的餐具都为忙时

7、进入Waiting状态.这时哲学家每一秒钟会检查一次其左右的餐具是否为空闲(则是否有足够的餐具以供其进入Eating状态).如果有则改变其状态为Eating,并拿起其左右的餐具,停止当前Timer控件为;如果没有则持续当前状态(即循环执行Timer控件中的程序).1.哲学家进餐问题:(1)在什么情况下5个哲学家全部吃不上饭?考虑两种实现的方式,如下:A.算法描述:voidphilosopher(i

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

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

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