



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、.專業(yè)整理 .師學(xué)院操作系統(tǒng)課程設(shè)計報告題目: 哲學(xué)家進餐問題班級:0903學(xué)號: 0919031709190319作者:羅文濤彭威指導(dǎo)教師:王玉奇2011年12月 26日.學(xué)習(xí)幫手 .專業(yè)整理 .目錄1設(shè)計題目與要求 .11.1實驗?zāi)康?.11.2設(shè)計要求 .11.3初始條件 .12總體設(shè)計思想及相關(guān)知識 .22.1總體設(shè)計思想 .22.2臨界區(qū)互斥編程原理 . .22.3開發(fā)環(huán)境與工具 .33數(shù)據(jù)結(jié)構(gòu)與模塊說明 .33.1數(shù)據(jù)結(jié)構(gòu) .33.2程序各模塊流程圖 .43.2.1主程序模塊 .43.2.3返回哲學(xué)家狀態(tài)模塊 . .53.2.4返回餐具狀態(tài)模塊 . .54源程序代碼 .65測試及結(jié)
2、果 .106課設(shè)總結(jié) .137參考文獻 .13.學(xué)習(xí)幫手 .專業(yè)整理 .1設(shè)計題目與要求1.1 實驗?zāi)康耐ㄟ^實現(xiàn)哲學(xué)家進餐問題的同步深入了解和掌握進程同步和互斥的原理。1.2 設(shè)計要求哲學(xué)家有 N個,也定全體到達后開始討論:在討論的間隙哲學(xué)家進餐,每人進餐時都需使用刀、叉各一把,所有哲學(xué)家刀和叉都拿到后才能進餐。哲學(xué)家的人數(shù)、餐桌上的布置自行設(shè)定,實現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。1.3 初始條件( 1)操作系統(tǒng): windows( 2)程序設(shè)計語言: C+( 3)設(shè)定圓桌上有六個哲學(xué)家,三對刀叉,如下圖擺放:圖 1-1 哲學(xué)家進餐問題設(shè)定圖.學(xué)習(xí)幫手 .專業(yè)整理 .2總體設(shè)計思想及相關(guān)知識
3、2.1 總體設(shè)計思想哲學(xué)家的生活就是思考和吃飯,即思考,餓了就餐,再思考,循環(huán)往復(fù)。要求是:每一個哲學(xué)家只有在拿到位于他左右的刀叉后,才能夠就餐;哲學(xué)家只能先拿一把刀或叉,再去拿另一把刀或叉,而不能同時去抓他旁邊的兩把餐具,也不能從其他哲學(xué)家手中搶奪餐具;哲學(xué)家每次就餐后必須放下他手中的兩把餐具后恢復(fù)思考,不能強抓住餐具不放。設(shè)計一個程序,能夠顯示當(dāng)前各哲學(xué)家的狀態(tài)和桌上餐具的使用情況,并能無死鎖的推算出下一狀態(tài)各哲學(xué)家的狀態(tài)和桌上餐具的使用情況。即設(shè)計一個能安排哲學(xué)家正常生活的程序。為哲學(xué)家設(shè)計 3 種狀態(tài),即“等待”“進餐”“思考”。每個哲學(xué)家重復(fù)進行“等待” -> “進餐” -&g
4、t; “思考”的行動循環(huán)。其中:“等待” -> “進餐”:只有一個哲學(xué)家處于等待進餐狀態(tài),且左右手兩邊的餐具都處于“空閑”狀態(tài)時,可以發(fā)生這種狀態(tài)改變。此狀態(tài)改變發(fā)生后,哲學(xué)家拿起左右手兩邊的餐具?!斑M餐” -> “思考”:此狀態(tài)改變發(fā)生后,哲學(xué)家放下左右手上的餐具。餐具狀態(tài)由“使用中”轉(zhuǎn)變?yōu)椤翱臻e” ?!八伎肌?-> “等待”:哲學(xué)家思考結(jié)束后,無條件轉(zhuǎn)入等待狀態(tài)。由上所述,程序中應(yīng)設(shè)置 6 個元素的信號量數(shù)組, tools6 ,用來保持哲學(xué)家之間的同步。2.2 臨界區(qū)互斥編程原理不論是硬件臨界資源,還是軟件臨界資源,多個進程必須互斥地對它進行訪問。每個進程中訪問臨界資源的
5、那段代碼稱為臨界區(qū)(Critical Section)。每個進程中訪問臨界資源的那段程序稱為臨界區(qū)(Critical Section)(臨界資源是一次僅允許一個進程使用的共享資源) 。每次只準(zhǔn)許一個進程進入臨界區(qū),進入后不允許其他進程進入。不論是硬件臨界資源,還是軟件臨界資源,多個進程必須互斥地對它進行訪問。本程序主要使用了EnterCriticalSection (&cs)和 LeaveCriticalSection (&cs).學(xué)習(xí)幫手 .專業(yè)整理 .兩個函數(shù)實現(xiàn)臨界區(qū)互斥。EnterCriticalSection (&cs)用來進入臨界區(qū), LeaveCritic
6、alSection (&cs)用來離開臨界區(qū)。2.3 開發(fā)環(huán)境與工具系統(tǒng)平臺: WINDOW環(huán)境實現(xiàn)語言: C+開發(fā)工具: VC+6.03數(shù)據(jù)結(jié)構(gòu)與模塊說明3.1 數(shù)據(jù)結(jié)構(gòu)Philosopher-number:int-status:int+Philosopher(in num:int)+find() const:int+getinfo() const:int+Change():void圖 3-1哲學(xué)家類的 UML圖程序中定義一個哲學(xué)家類,包含兩個私有對象和四個公有對象。Number對象:報訊哲學(xué)家的編號。Status 對象:用于保存當(dāng)前該哲學(xué)家的狀態(tài),0 表示正在等待(即處于饑餓狀態(tài))
7、1 表示得到餐具正在吃飯,2 表示正在思考Philosopher(int num)方法:哲學(xué)家類構(gòu)造函數(shù),參數(shù)num表示哲學(xué)家編號find() const方法:返回該哲學(xué)家編號getinfo() const方法:返回哲學(xué)家當(dāng)前狀態(tài)Change() 方法:根據(jù)題目要求改變哲學(xué)家的狀態(tài)(等待-> 進餐 -> 思考 -> 等待)另外,程序中包含一個公有對象,bool 類型數(shù)組 tools6,用來保存 6 把餐當(dāng)前.學(xué)習(xí)幫手 .專業(yè)整理 .狀態(tài): true 表示該餐具當(dāng)前空閑, false表示該餐具當(dāng)前正被使用。程序中還包含兩個公有函數(shù):print和 toolstatus。 Prin
8、t用來返回一個哲學(xué)家的狀態(tài), toolstatus用來返回一個餐具的狀態(tài)。3.2 程序各模塊流程圖主程序模塊圖 3-2 主程序模塊流程狀態(tài)改變模塊.學(xué)習(xí)幫手 .專業(yè)整理 .圖 3-3 狀態(tài)改變模塊 Change() 流程圖返回哲學(xué)家狀態(tài)模塊圖 3-4 返回哲學(xué)家狀態(tài)模塊print()流程圖返回餐具狀態(tài)模塊.學(xué)習(xí)幫手 .專業(yè)整理 .圖 3-5 返回餐具狀態(tài)模塊toolstatus(bool a)流程圖4源程序代碼/ 實驗?zāi)康模和ㄟ^實現(xiàn)哲學(xué)家進餐問題的同步深入了解和掌握進程同步和互斥的原理。/ 設(shè)計要求:哲學(xué)家有 N 個,也定全體到達后開始討論:在討論的間隙哲學(xué)家進餐,/ 每人進餐時都需使用刀、叉
9、各一把,所有哲學(xué)家刀和叉都拿到后才能進餐。哲學(xué)家的人數(shù)、/ 餐桌上的布置自行設(shè)定,實現(xiàn)刀和叉的互斥使用算法的程序?qū)崿F(xiàn)。#include <windows.h>#include <time.h>#include <string>#include <iostream>#include <assert.h>using namespace std;bool tools6;/ 全局變量,用餐工具CRITICAL_SECTION cs; / 信號量 ,在線程中使用,臨界區(qū)class Philosopherprivate:int number;.學(xué)
10、習(xí)幫手 .專業(yè)整理 .int status;/*標(biāo)記當(dāng)前哲學(xué)家的狀態(tài),0表示正在等待 ( 即處于饑餓狀態(tài) ),1 表示得到兩支筷子正在吃飯,2 表示正在思考 */public:Philosopher(int num=0): status(2), number(num) int find() const return number; int getinfo() const return status; void Change() ;/狀態(tài)改變函數(shù);void Philosopher:Change()EnterCriticalSection (&cs) ; /進入臨界區(qū)if(status=1
11、) /正在進餐toolsnumber%6=true; /放下左手工具tools(number-1)%6=true; /放下右手工具status=2;/ 改變狀態(tài)為思考else if(status=2)/ 思考中status=0;/改變狀態(tài)為等待else if(status=0)/ 等待中if(toolsnumber%6&&tools(number-1)%6)/左右手兩邊工具均為空閑狀態(tài)toolsnumber%6=false; /拿起左手工具tools(number-1)%6=false; /拿起右手工具status=1;.學(xué)習(xí)幫手 .專業(yè)整理 .LeaveCriticalSec
12、tion (&cs) ;string print(Philosopher *pA)/pA->Change();int i=pA->getinfo();string str;if(i=0)str=" 等待 "else if(i=1)str=" 就餐 "else str="思考 "return str;string toolstatus(bool a)string state;if(a=true)state=" 閑 "if(a=false)state=" 用 "return st
13、ate;int main()char con = 'y' /判斷是否繼續(xù)for(int i=0;i<6;i+)toolsi=true; /3組刀叉都未使用,初始化.學(xué)習(xí)幫手 .專業(yè)整理 .Philosopher P1(1),P2(2),P3(3),P4(4),P5(5),P6(6);InitializeCriticalSection (&cs) ; /初始化初始化臨界區(qū)cout<<"-狀態(tài)說明示意圖:-"<<endl;cout<<""<<" 哲學(xué)家 0 號的狀態(tài) &q
14、uot;<<""<<endl;cout<<" 哲學(xué)家 5 號的狀態(tài) "<<""<<" 叉 3 的狀態(tài) "<<""<<" 刀 1 的狀態(tài)"<<""<<" 哲學(xué)家 1 號的狀態(tài) "<<endl;cout<<""<<"刀 3 的狀態(tài) "<<"
15、;"<<"叉 1 的狀態(tài)"<<endl;cout<<" 哲學(xué)家 4 號的狀態(tài) "<<""<<" 叉 2 的狀態(tài) "<<""<<" 刀 2 的狀態(tài)"<<""<<" 哲學(xué)家 2 號的狀態(tài) "<<endl;cout<<""<<" 哲學(xué)家 3 號的狀態(tài) "
16、;<<""<<endl;cout<<" 餐具的狀態(tài),“用”表示使用中,“閑”表示空閑中。"<<endl;cout<<"-"<<endl;cout<<" 哲學(xué)家們開始生活: "<<endl;cout<<endl;cout<<endl;while(con='y')P1.Change();P2.Change();P3.Change();P4.Change();P5.Change();P6
17、.Change();cout<<" 當(dāng)前狀態(tài)為: "<<endl;cout<<""<<P1.find()<<print(&P1)<<""<<endl;cout<<P6.find()<<print(&P6)<<""<<toolstatus(tools0)<<""<<toolstatus(tools1)<<"
18、"<<P2.find()<<print(&P2)<<endl;cout<<""<<toolstatus(tools5)<<".學(xué)習(xí)幫手 .專業(yè)整理 ."<<toolstatus(tools2)<<endl;cout<<P5.find()<<print(&P5)<<""<<toolstatus(tools4)<<""<<toolstatus(tools3)<<""<<P3.find()<<print(&P3)<<endl;cout<<" "<<P4.find()<<print(&P4)<<" "<<endl; cout<<"-"<<endl;cout<<" 若要繼
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)培訓(xùn)課件分類
- 營養(yǎng)師實操題
- 油漆工藝危險源辨識與風(fēng)險評價信息表
- 英語單詞大全3500
- 跨國公司內(nèi)部股權(quán)調(diào)整與員工持股計劃協(xié)議
- 電力采購合同談判與電力市場改革政策適應(yīng)
- 醫(yī)院裝修技術(shù)方案文本
- 樓盤研發(fā)方案
- 知識產(chǎn)權(quán)孵化器廠房轉(zhuǎn)租及知識產(chǎn)權(quán)運營合同
- 正規(guī)公司稅務(wù)運作方案
- 中藥泡洗技術(shù)-2
- 大學(xué)體育:輪滑教案
- 馬太效應(yīng)課件完整版
- 馬克思主義原著選讀課程
- 保障性租賃住房申請表
- 2023年中智總部及直屬單位個高管職位公開招聘筆試參考題庫附帶答案詳解
- iqc培訓(xùn)教材基礎(chǔ)課件
- 中等職業(yè)學(xué)校藝術(shù)課程標(biāo)準(zhǔn)(2020年版)(word精排版)
- GB/T 15435-1995環(huán)境空氣二氧化氮的測定Saltzman法
- GB/T 1355-2021小麥粉
- 產(chǎn)科急危重癥的早期識別與處理考核試題及答案
評論
0/150
提交評論