操作系統(tǒng)哲學(xué)家就餐問題實(shí)驗(yàn)報告_第1頁
操作系統(tǒng)哲學(xué)家就餐問題實(shí)驗(yàn)報告_第2頁
操作系統(tǒng)哲學(xué)家就餐問題實(shí)驗(yàn)報告_第3頁
操作系統(tǒng)哲學(xué)家就餐問題實(shí)驗(yàn)報告_第4頁
操作系統(tǒng)哲學(xué)家就餐問題實(shí)驗(yàn)報告_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)?zāi)康模?)、掌握基本的同步互斥算法,理解哲學(xué)家就餐模型。2)、了解windows2000/XP中多線程的并發(fā)執(zhí)行機(jī)制,線程間的同步和互斥。(3)、學(xué)習(xí)使用windows2000/XP中基本的同步對象,掌握相應(yīng)的 API。2、實(shí)驗(yàn)要求有五個哲學(xué)家共用一張放有五把椅子的餐桌,每人坐在一把椅子上,桌子上有五個碗和五只筷子,每人兩邊各放一只筷子。哲學(xué)家們是交替思考和進(jìn)餐,饑餓時便試圖取其左右最靠近他的筷子。條件:(1)、只有拿到兩只筷子時,哲學(xué)家才能吃飯。(2)、如果筷子已被別人拿走,則必須等別人吃完之后才能拿到筷子。(3)、任意一個哲學(xué)家在自己未拿到兩只筷子吃飯前,不會放下手中拿到的筷子。3、實(shí)驗(yàn)環(huán)境硬件:CPU:AMDQL64內(nèi)存:2GB顯卡:ATI4570硬盤:日立250G軟件:Windows2000/XP。開發(fā)工具:VC++4、實(shí)驗(yàn)內(nèi)容1)實(shí)現(xiàn)原理1、利用記錄型信號量解決哲學(xué)家進(jìn)餐問題;2、臨界區(qū)互斥編程原理。)程序結(jié)構(gòu)(流程圖)開始定義信號量 tools[5]定義哲學(xué)家類對象 P1-P5哲學(xué)家的狀態(tài)發(fā)生改變;();();();();()輸出當(dāng)前狀態(tài)否停止程序結(jié)束圖1.主程序模塊流程圖開始哲學(xué)家處于的是 放下左右 否哲學(xué)家處于思考狀態(tài)否哲學(xué)家處于等待狀態(tài)為思考 是 狀 態(tài) 改 為 等 待是左右手筷子均空閑是拿起左右手筷子狀 態(tài) 改 為 就 餐結(jié)束圖2.狀態(tài)改變模塊流程圖圖3.返回哲學(xué)家狀態(tài)流程圖圖4返回餐具狀態(tài)模塊流程圖3)數(shù)據(jù)結(jié)構(gòu)(1)、定義一個哲學(xué)家類,包含兩個私有對象和四個公有對象。(2)、定義函數(shù):Number對象:哲學(xué)家的編號;Status對象:保存當(dāng)前該哲學(xué)家的狀態(tài), 0表示等待,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)(等待 ->進(jìn)餐->思考)另外,程序中包含一個公有對象,bool類型數(shù)組tools[6],用來保存6把餐具當(dāng)前狀態(tài):true表示該餐具當(dāng)前空閑,false表示該餐具當(dāng)前正被使用。程序中還包含兩個公有函數(shù):print 和toolstatus 。Print 用來返回一個哲學(xué)家的狀態(tài),toolstatus 用來返回一個餐具的狀態(tài)。4)實(shí)現(xiàn)步驟1)打開VC,選擇菜單項(xiàng)File->New,選擇Projects 選項(xiàng)卡并建立一個名為 xwj的win32consoleapplication工程,創(chuàng)建時注意指定創(chuàng)建該工程的目錄;(2)在工程中創(chuàng)建源文件:選擇菜單項(xiàng) Project->Addtoproject->Files, 此時將打開一個新窗口,在其中的“文件名”輸入欄中輸入自己想要創(chuàng)建的文件名,這里是;接著詢問是否創(chuàng)建新文件時回答“yes”。通過Workspace->SourceFiles打開該文件,在其中編輯源文件并保存;3)通過調(diào)用菜單項(xiàng)Build->Rebuildall進(jìn)行編譯連接,可以在指定的工程目錄下得到debug->程序。5、實(shí)驗(yàn)測試及分析:圖5.測試結(jié)果1圖6.測試結(jié)果2圖7.測試結(jié)果3圖8.測試結(jié)果45、結(jié)果分析:1)、程序分為四大模塊,一步步解決了哲學(xué)家狀態(tài)及狀態(tài)改變的問題,筷子的“閑”、“用”問題;2)、實(shí)現(xiàn)了哲學(xué)家等待、吃飯、思考三個過程的轉(zhuǎn)換循環(huán),并且避免了死鎖問題;3)、讓臨界資源得到了充分的利用。6、實(shí)驗(yàn)心得體會1)、這次實(shí)驗(yàn)加強(qiáng)了我上網(wǎng)查數(shù)檢索問題的能力;2)、這次實(shí)驗(yàn)讓我學(xué)會分模塊解決問題,怎樣運(yùn)用互斥鎖對臨界資源進(jìn)行管理;3)、這次實(shí)驗(yàn),發(fā)現(xiàn)自己在編程上及一些函數(shù)的認(rèn)識仍存在較大的問題,以后應(yīng)該多多實(shí)踐,提高自己的反應(yīng)速度,加強(qiáng)邏輯思維能力。附錄:源代碼#include<>#include<>#include<string>#include<iostream>#include<>usingnamespacestd;booltools[5];// 全局變量,用餐工具CRITICAL_SECTIONcs;//信號量, 在線程中使用,臨界區(qū)classPhilosopher{private:intnumber;intstatus; /* 標(biāo)記當(dāng)前哲學(xué)家的狀態(tài) ,0表示正在等待(即處于饑餓狀態(tài)),1表示得到兩支筷子正在吃飯,2表示正在思考*/public:Philosopher(intnum=0):status(2),number(num) {}constintfind(){returnnumber;}constintgetinfo(){returnstatus;}voidChange();// 狀態(tài)改變函數(shù)voiddead_lock();};/////////voidPhilosopher::dead_lock(){EnterCriticalSection(&cs);//strings;if(status==1){

進(jìn)入臨界區(qū)tools[number%5]=true;tools[(number-1)%5]=true;status=2;}elseif(status==2){status=0;//tools[(number-1)%5]=false;//tools[(number-1)%5]=true;}elseif(status==0){tools[number%5]=false;tools[(number-1)%5]=false;status=1;}LeaveCriticalSection(&cs);cout<<"*********";}/////////voidPhilosopher::Change(){EnterCriticalSection(&cs);// 進(jìn)入臨界區(qū)if(status==1)//{

正在進(jìn)餐tools[number%5]=true;//

放下左手工具tools[(number-1)%5]=true;//

放下右手工具status=2; //}

改變狀態(tài)為思考elseif(status==2)//{

思考中status=0; //}

改變狀態(tài)為等待elseif(status==0)//{

等待中if(tools[number%5]&&tools[(number-1)%5]) //

左右手兩邊工具均為空閑狀態(tài){tools[number%5]=false;//

拿起左手工具tools[(number-1)%5]=false;//status=1;}}LeaveCriticalSection(&cs);}stringprint(Philosopher*pA){//pA->Change();inti=pA->getinfo();stringstr;

拿起右手工具if(i==0)str=" 等待";elseif(i==1)str=" 就餐";elsestr=" 思考";returnstr;}stringtoolstatus(boola){stringstate;if(a==true)state=" 閑";if(a==false)state=" 用";returnstate;}intmain(){charcon='y';// 判斷是否繼續(xù)//con='n';for(inti=0;i<5;i++)tools[i]=true;// 筷子都未使用,初始化PhilosopherP1(1),P2(2),P3(3),P4(4),P5(5);InitializeCriticalSection(&cs);//

初始化初始化臨界區(qū)cout<<"-----------------------

狀 態(tài) 說

明 示 意

圖 :-----------------------"<<endl;cout<<"

"<<"

哲學(xué)家

1號的狀態(tài)"<<"

"<<endl;cout<<"筷子0的狀態(tài)"<<""<<"筷子1的狀態(tài)"<<endl;cout<<"哲學(xué)家5號的狀態(tài)"<<""<<"哲學(xué)家2號的狀態(tài)"<<endl;cout<<"筷子4的狀態(tài)"<<""<<"筷子2的狀態(tài)"<<endl;cout<<"哲學(xué)家4號的狀態(tài)"<<""<<"哲學(xué)家3號的狀態(tài)"<<endl;cout<<""<<"筷子3的狀態(tài)"<<endl;//cout<<""<<"哲學(xué)家3號的狀態(tài)"<<""<<endl;cout<<"筷子的狀態(tài),用表示使用中,閑表示空閑中。 "<<endl;cout<<"--------------------------------------------------------------"<<endl;//cout<<" 哲學(xué)家們開始生活:"<<endl;//cout<<" 當(dāng)前狀態(tài):";cout<<endl;//cin>>con;while(con=='y'){();();();();();cout<<"當(dāng)前狀態(tài)為:"<<endl;cout<<" "<<()<<print(&P1)<<" "<<endl;cout<<" "<<toolstatus(tools[0])<<""<<toolstatus(tools[1])<<endl;cout<<""<<()<<print(&P5)<<" "<<()<<print(&P2)<<endl;cout<<" "<<toolstatus(tools[4])<<""<<toolstatus(tools[2])<<endl;cout<<" "<<()<<print(&P4)<<" "<<()<<print(&P3)<<endl;cout<<" "<<toolstatus(tools[3])<<endl;cout<<"--------------------------"<<endl;cout<<"若要繼續(xù)下一狀態(tài),輸入 y;輸入n進(jìn)入死鎖;輸入其他,結(jié)束程序:";cin>>con;Sleep(20);}while(con=='n'){();();();();();cout<<"死鎖情況"<<endl;cout<<" "<<()<<print(&P1)<<" "<<endl;cout<<" "<<toolstatus(tools[0])<<""<<toolstatus(tools[1])<<endl;cout<<""<<()<<print(&P5)<<" "<<()<<print(&P2)<<endl;cout<<" "<<toolstatus(tools[4])<<""<<toolstatus(to

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論