




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、GDOU-B-11-112广东海洋大学学生实验报告书(学生用表)实验名称课程名称计算机操作系统学院(系)数学与计算机学院专业班级学生姓名学号实验地点实验日期实验哲学家就餐问题1.1.1服务生解法一个简单的解法是引入一个餐厅服务生,哲学家必须经过他的允许才能拿起餐叉。因为服务生知道哪只餐叉正在使用,所以他能够作出判断避免死锁。为了演示这种解法,假设哲学家依次标号为A至E。如果A和C在吃东西,则有四只餐叉在使用中。B坐在A和C之间,所以两只餐叉都无法使用,而D和E之间有一只空余的餐叉。假设这时D想要吃东西。如果他拿起了第五只餐叉,就有可能发生死锁。相反,如果他征求服务生同意,服务生会让他等待。这样
2、,我们就能保证下次当两把餐叉空余出来时,一定有一位哲学家可以成功的得到一对餐叉,从而避免了死锁。1.1.2资源分级解法另一个简单的解法是为资源(这里是餐叉)分配一个偏序或者分级的关系,并约定所有资源都按照这种顺序获取,按相反顺序释放,而且保证不会有两个无关资源同时被同一项工作所需要。在哲学家就餐问题中,资源(餐叉)按照某种规则编号为1至5,每一个工作单元(哲学家)总是先拿起左右两边编号较低的餐叉,再拿编号较高的。用完餐叉后,他总是先放下编号较高的餐叉,再放下编号较低的。在这种情况下,当四位哲学家同时拿起他们手边编号较低的餐叉时,只有编号最高的餐叉留在桌上,从而第五位哲学家就不能使用任何一只餐叉
3、了。而且,只有一位哲学家能使用最高编号的餐叉,所以他能使用两只餐叉用餐。当他吃完后,他会先放下编号最高的餐叉,再放下编号较低的餐叉,从而让另一位哲学家拿起后边的这只开始吃东西。尽管资源分级能避免死锁,但这种策略并不总是实用的,特别是当所需资源的列表并不是事先知道的时候。例如,假设一个工作单元拿着资源3和5,并决定需要资源2,则必须先要释放5,之后释放3,才能得到2,之后必须重新按顺序获取3和5。对需要访问大量数据库记录的计算机程序来说,如果需要先释放高编号的记录才能访问新的记录,那么运行效率就不会高,因此这种方法在这里并不实用。这种方法经常是实际计算机科学问题中最实用的解法,通过为分级锁指定常
4、量,强制获得锁的顺序,就可以解决这个问题。1.1.3Chandy/Misra解法1984年,K.ManiChandy和J.Misra提出了哲学家就餐问题的另一个解法,允许任意的用户(编号P1,.,Pn)争用任意数量的资源。与迪科斯彻的解法不同的是,这里编号可以是任意的。干净1.对每一对竞争一个资源的哲学家,新拿一个餐叉,给编号较低的哲学家。每只餐叉都是的”或者脏的”最初,所有的餐叉都是脏的。2当一位哲学家要使用资源(也就是要吃东西)时,他必须从与他竞争的邻居那里得到。对每只他当前没有的餐叉,他都发送一个请求。3当拥有餐叉的哲学家收到请求时,如果餐叉是干净的,那么他继续留着,否则就擦干净并交出餐
5、叉。4当某个哲学家吃东西后,他的餐叉就变脏了。如果另一个哲学家之前请求过其中的餐叉,那他就擦干净并交出餐叉。这个解法允许很大的并行性,适用于任意大的问题。详细实现代码如下:packagesync2;/*表示筷子的类*/publicclassChopstickpublicChopstick()publicChopstick(intid)this.id=id;publicbooleanisAvailable()returnavailable;publicvoidsetAvailable(booleanavailablethis.available=available;publicintgetld(
6、)returnid;publicvoidsetId(intid)this.id=id;OverridepublicStringtoString()return筷子+id;表示筷子是否可用*/privatevolatilebooleanavailable=true;privateintid;packagesync2;publicclassChopstickArraypublicChopstickArray()publicChopstickArray(intsize)chopsticks=newChopsticksize;for(inti=0;ichopsticksength;+i)chopsti
7、cksi=newChopstick(i);publicChopstickgetld(intid)returnchopsticksid;publicChopstickgetLast(intid)if(id=0)returnchopstickschopsticksength-1;elsereturnchopsticksid-1;privateChopstickchopsticks;packagesync2;importjava.util.Random;importjavax.swing.JTextArea;publicclassPhilosopherimplementsRunnablepublic
8、Philosopher()publicPhilosopher(intid,ChopstickArraychopstickArray,JTextAreathinkingTextArea,JTextAreaeatingtextArea,JTextAreawaitingTextArea)this.id=id;this.chopstickArray=chopstickArray;this.thinkingTextArea=thinkingTextArea;this.eatingTextArea=eatingtextArea;this.waitingTextArea=waitingTextArea;pu
9、blicsynchronizedvoidthinking()if(state)/如果在思考,说明这个哲学家两面的筷子没用chopstickArray.getId(id).setAvailable(true);chopstickArray.getLast(id).setAvailable(true);Stringtext=thinkingTextArea.getText();thinkingTextArea.setText(text+this+在思考n);tryThread.sleep(IOOO);catch(Exceptione)e.printStackTrace();state=false;
10、publicsynchronizedvoideating()if(!state)/在思考if(chopstickArray.getld(id).isAvailable()/如果哲学家右手边的筷子可用if(chopstickArray.getLast(id).isAvailable()/如果左手边的筷子也可用/然后将这个能吃饭的哲学家两侧的筷子都设置为不可用chopstickArray.getId(id).setAvailable(false);chopstickArray.getLast(id).setAvailable(false);Stringtext=eatingTextArea.get
11、Text();eatingTextArea.setText(text+this+在吃饭n);tryThread.sleep(1000);catch(Exceptione)e.printStackTrace();else/右手边的筷子可用,但是左手边的不可用Stringstr=waitingTextArea.getText();waitingTextArea.setText(str+this+在等待+chopstickArray.getLast(id)+n);trywait(newRandom().nextlnt(100);catch(Exceptione)e.printStackTrace()
12、;else/如果哲学家右手边的筷子不可用则等待Stringstr=waitingTextArea.getText();waitingTextArea.setText(str+this+在等待+chopstickArray.getId(id)+n);trywait(newRandom().nextInt(100);catch(Exceptione)e.printStackTrace();state=true;Overridepublicvoidrun()for(inti=0;i10;+i)thinking。;eating();OverridepublicStringtoString()retur
13、n哲学家+id;privateintid;privatebooleanstate;ChopstickArraychopstickArray;JTextAreathinkingTextArea;JTextAreaeatingTextArea;JTextAreawaitingTextArea;packagesync2;importjava.awt.FlowLayout;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JBu
14、tton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;publicclassDiningPhilosophersFrameextendsJFramepublicDiningPhilosophersFrame()panel2.setLayout(newGridLayout(2,2,3,3);panel2.add(label2);panel2.add(label3);panel2
15、.add(label4);JScrollPanejs1=newJScrollPane(thinkingTextArea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);JScrollPanejs2=newJScrollPane(eatingTextArea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);JScrollPanejs3=newJScrollPane(waiting
16、TextArea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);panel2.add(js1);panel2.add(js2);panel2.add(js3);panel1.setLayout(newFlowLayout();panell.add(labell);panel1.add(panel2);panel1.add(button);setContentPane(panel1);button.addActionListener(newActionListener()Overrid
17、epublicvoidactionPerformed(ActionEvente)ChopstickArraychopstickArray=newChopstickArray(5);for(inti=0;i5;i+)newThread(newPhilosopher,chopstickArray,thinkingTextArea,eatingTextArea,waitingTextArea).start(););setSize(300,400);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);publicstaticvoidmain(Stringargs)newDiningPhilosophersFrame();privatefinalJPanelpanel1=newJPanel();privatefinalJPanelpanel2=newJPanel();privatefinalJTextAreathinkingTextArea=newJTextArea(5,10);priv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 印度道路安全培训课件
- 危险废物环保试题及答案
- 测氧仪培训试题及答案
- 广告设计师考试互动性设计元素试题及答案
- 成功备考的纺织工程师考试试题及答案
- 最基本的普法试题及答案
- 政治青岛一模试题及答案
- 2024年行业标准下的设计师考试试题及答案
- 助理广告师备考过程中的常见误区试题及答案
- 公安警校面试题及答案
- 演唱会安保方案及应急预案
- 《新闻评论》课件 第四章 新闻评论的基本类型
- 《齿轮介绍》课件
- 民营医院分析报告
- 知心慧学提分宝-数学
- 吉祥航空飞行报告
- 《曼陀罗绘画疗愈-初三减压》PPT
- 彩钢板屋面监理细则
- 文艺复兴史学习通超星课后章节答案期末考试题库2023年
- 城市设计原理-西安建筑科技大学中国大学mooc课后章节答案期末考试题库2023年
- 初中生物理自主学习能力现状的调查研究的开题报告
评论
0/150
提交评论