




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、GDOU-B-11-112廣東海洋大學(xué)學(xué)生實(shí)驗(yàn)報(bào)告書(學(xué)生用表)實(shí)驗(yàn)名稱課程名稱計(jì)算機(jī)操作系統(tǒng)學(xué)院(系)數(shù)學(xué)與計(jì)算機(jī)學(xué)院專業(yè)班級(jí)學(xué)生姓名學(xué)號(hào)實(shí)驗(yàn)地點(diǎn)實(shí)驗(yàn)日期實(shí)驗(yàn)哲學(xué)家就餐問題1.1.1服務(wù)生解法一個(gè)簡單的解法是引入一個(gè)餐廳服務(wù)生,哲學(xué)家必須經(jīng)過他的允許才能拿起餐叉。因?yàn)榉?wù)生知道哪只餐叉正在使用,所以他能夠作出判斷避免死鎖。為了演示這種解法,假設(shè)哲學(xué)家依次標(biāo)號(hào)為A至E。如果A和C在吃東西,則有四只餐叉在使用中。B坐在A和C之間,所以兩只餐叉都無法使用,而D和E之間有一只空余的餐叉。假設(shè)這時(shí)D想要吃東西。如果他拿起了第五只餐叉,就有可能發(fā)生死鎖。相反,如果他征求服務(wù)生同意,服務(wù)生會(huì)讓他等待。這樣
2、,我們就能保證下次當(dāng)兩把餐叉空余出來時(shí),一定有一位哲學(xué)家可以成功的得到一對(duì)餐叉,從而避免了死鎖。1.1.2資源分級(jí)解法另一個(gè)簡單的解法是為資源(這里是餐叉)分配一個(gè)偏序或者分級(jí)的關(guān)系,并約定所有資源都按照這種順序獲取,按相反順序釋放,而且保證不會(huì)有兩個(gè)無關(guān)資源同時(shí)被同一項(xiàng)工作所需要。在哲學(xué)家就餐問題中,資源(餐叉)按照某種規(guī)則編號(hào)為1至5,每一個(gè)工作單元(哲學(xué)家)總是先拿起左右兩邊編號(hào)較低的餐叉,再拿編號(hào)較高的。用完餐叉后,他總是先放下編號(hào)較高的餐叉,再放下編號(hào)較低的。在這種情況下,當(dāng)四位哲學(xué)家同時(shí)拿起他們手邊編號(hào)較低的餐叉時(shí),只有編號(hào)最高的餐叉留在桌上,從而第五位哲學(xué)家就不能使用任何一只餐叉
3、了。而且,只有一位哲學(xué)家能使用最高編號(hào)的餐叉,所以他能使用兩只餐叉用餐。當(dāng)他吃完后,他會(huì)先放下編號(hào)最高的餐叉,再放下編號(hào)較低的餐叉,從而讓另一位哲學(xué)家拿起后邊的這只開始吃東西。盡管資源分級(jí)能避免死鎖,但這種策略并不總是實(shí)用的,特別是當(dāng)所需資源的列表并不是事先知道的時(shí)候。例如,假設(shè)一個(gè)工作單元拿著資源3和5,并決定需要資源2,則必須先要釋放5,之后釋放3,才能得到2,之后必須重新按順序獲取3和5。對(duì)需要訪問大量數(shù)據(jù)庫記錄的計(jì)算機(jī)程序來說,如果需要先釋放高編號(hào)的記錄才能訪問新的記錄,那么運(yùn)行效率就不會(huì)高,因此這種方法在這里并不實(shí)用。這種方法經(jīng)常是實(shí)際計(jì)算機(jī)科學(xué)問題中最實(shí)用的解法,通過為分級(jí)鎖指定常
4、量,強(qiáng)制獲得鎖的順序,就可以解決這個(gè)問題。1.1.3Chandy/Misra解法1984年,K.ManiChandy和J.Misra提出了哲學(xué)家就餐問題的另一個(gè)解法,允許任意的用戶(編號(hào)P1,.,Pn)爭用任意數(shù)量的資源。與迪科斯徹的解法不同的是,這里編號(hào)可以是任意的。干凈1.對(duì)每一對(duì)競爭一個(gè)資源的哲學(xué)家,新拿一個(gè)餐叉,給編號(hào)較低的哲學(xué)家。每只餐叉都是的”或者臟的”最初,所有的餐叉都是臟的。2當(dāng)一位哲學(xué)家要使用資源(也就是要吃東西)時(shí),他必須從與他競爭的鄰居那里得到。對(duì)每只他當(dāng)前沒有的餐叉,他都發(fā)送一個(gè)請(qǐng)求。3當(dāng)擁有餐叉的哲學(xué)家收到請(qǐng)求時(shí),如果餐叉是干凈的,那么他繼續(xù)留著,否則就擦干凈并交出餐
5、叉。4當(dāng)某個(gè)哲學(xué)家吃東西后,他的餐叉就變臟了。如果另一個(gè)哲學(xué)家之前請(qǐng)求過其中的餐叉,那他就擦干凈并交出餐叉。這個(gè)解法允許很大的并行性,適用于任意大的問題。詳細(xì)實(shí)現(xiàn)代碼如下: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)/如果在思考,說明這個(gè)哲學(xué)家兩面的筷子沒用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()/如果哲學(xué)家右手邊的筷子可用if(chopstickArray.getLast(id).isAvailable()/如果左手邊的筷子也可用/然后將這個(gè)能吃飯的哲學(xué)家兩側(cè)的筷子都設(shè)置為不可用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/如果哲學(xué)家右手邊的筷子不可用則等待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哲學(xué)家+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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑項(xiàng)目合同范本:勘察與設(shè)計(jì)
- 山地旅游資源開發(fā)承包合同
- 鋼材采購合同樣本格式
- 餐飲服務(wù)與廚師雇傭合同范文
- 涂料供應(yīng)與采購合同范本
- 合同檔案寄存確認(rèn)書
- 貸款合同模板:個(gè)人貸款標(biāo)準(zhǔn)合同范本
- 銀行與公司短期貸款合同范例
- 氣動(dòng)系統(tǒng)培訓(xùn)課件
- 海豚培訓(xùn)課件下載
- 月子會(huì)所護(hù)理人員禮儀
- GB/T 44958-2024化工設(shè)備安全管理規(guī)范
- 校園安全隱患排查培訓(xùn)
- 無人機(jī)行業(yè)調(diào)查研究報(bào)告
- 2025年軋鋼原料工技能考試題庫
- 大學(xué)生考研規(guī)劃
- 2022版藝術(shù)新課標(biāo)解讀心得(課件)小學(xué)美術(shù)
- 四川政采評(píng)審專家入庫考試基礎(chǔ)題復(fù)習(xí)試題
- 車輛采購論證方案
- 《ZARA服裝品牌策劃》課件
- 員工賠償金保密協(xié)議書(2篇)
評(píng)論
0/150
提交評(píng)論