



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、。1、實驗目的:( 1)、掌握基本的同步互斥算法,理解哲學家就餐模型。( 2)、了解 windows 2000/XP 中多線程的并發(fā)執(zhí)行機制,線程間的同步和互斥。( 3)、學習使用 windows 2000/XP 中基本的同步對象,掌握相應(yīng)的API。2、實驗要求有五個哲學家共用一張放有五把椅子的餐桌, 每人坐在一把椅子上, 桌子上有五個碗和五只筷子, 每人兩邊各放一只筷子。 哲學家們是交替思考和進餐, 饑餓時便試圖取其左右最靠近他的筷子。條件: (1) 、只有拿到兩只筷子時,哲學家才能吃飯。 (2) 、如果筷子已被別人拿走,則必須等別人吃完之后才能拿到筷子。 (3) 、任意一個哲學家在自己未拿
2、到兩只筷子吃飯前,不會放下手中拿到的筷子。3、實驗環(huán)境硬件: CPU :AMD QL64內(nèi)存: 2GB 顯卡: ATI 4570 硬盤:日立 250G軟件: Windows 2000/XP。開發(fā)工具: VC+6.04、實驗內(nèi)容1)實現(xiàn)原理1、利用記錄型信號量解決哲學家進餐問題;2、臨界區(qū)互斥編程原理。2 )程序結(jié)構(gòu)(流程圖)開始定義信號量tools5定義哲學家類對象P1-P5哲學家的狀態(tài)發(fā)生改變;P1.change();P2.change();P3.change();P4.change();P5.change()輸出當前狀態(tài)否停止程序結(jié)束精選資料,歡迎下載。圖 1. 主程序模塊流程圖開始哲學家
3、處于的狀態(tài) status=1是放 下 左 右否 哲學家處于思考狀態(tài)手工具Status=2否 哲學家處于等待狀態(tài)為思考是狀態(tài)改為等待status=0Status=0Status=2是 左右手筷子均空閑是 拿起左右手筷子狀態(tài)改為就餐status=1結(jié)束圖 2. 狀態(tài)改變模塊流程圖精選資料,歡迎下載。圖 3. 返回哲學家狀態(tài)流程圖精選資料,歡迎下載。圖 4 返回餐具狀態(tài)模塊流程圖3)數(shù)據(jù)結(jié)構(gòu)(1)、定義一個哲學家類,包含兩個私有對象和四個公有對象。(2)、定義函數(shù):Number對象:哲學家的編號;Status 對象:保存當前該哲學家的狀態(tài), 0 表示等待, 1 表示吃飯, 2 表示思考;Philos
4、opher(int num)方法:哲學家類構(gòu)造函數(shù),參數(shù) num表示哲學家編號; find() const 方法:返回該哲學家編號;getinfo() const方法:返回哲學家當前狀態(tài);Change() 方法:根據(jù)題目要求改變哲學家的狀態(tài)(等待- 進餐 - 思考)另外,程序中包含一個公有對象, bool 類型數(shù)組 tools6 ,用來保存 6 把餐具當前狀態(tài): true 表示該餐具當前空閑, false 表示該餐具當前正被使用。程序中還包含兩個公有函數(shù): print 和 toolstatus 。Print 用來返回一個哲學家的狀態(tài), toolstatus 用來返回一個餐具的狀態(tài)。4)實現(xiàn)步驟
5、1)打開 VC,選擇菜單項 File-New ,選擇 Projects選項卡并建立一個名為xwj的 win32 console application工程,創(chuàng)建時注意指定創(chuàng)建該工程的目錄;精選資料,歡迎下載。( 2 ) 在 工 程 中 創(chuàng) 建 源 文 件 xwj.cpp : 選 擇 菜 單 項 Project-Add to project-Files, 此時將打開一個新窗口,在其中的“文件名”輸入欄中輸入自己想要創(chuàng)建的文件名, 這里是 xwj.cpp ;接著詢問是否創(chuàng)建新文件時回答 “ yes”。通過 Workspace-Source Files 打開該文件,在其中編輯源文件并保存;( 3)通
6、過調(diào)用菜單項 Build-Rebuild all 進行編譯連接,可以在指定的工程目錄下得到 debug-xwj.exe 程序。5、實驗測試及分析:圖 5. 測試結(jié)果 1精選資料,歡迎下載。圖 6. 測試結(jié)果 2圖 7. 測試結(jié)果 3精選資料,歡迎下載。圖 8. 測試結(jié)果 45、結(jié)果分析:( 1)、程序分為四大模塊, 一步步解決了哲學家狀態(tài)及狀態(tài)改變的問題, 筷子的“閑”、“用”問題;( 2)、實現(xiàn)了哲學家等待、吃飯、思考三個過程的轉(zhuǎn)換循環(huán),并且避免了死鎖問題;( 3)、讓臨界資源得到了充分的利用。6、實驗心得體會( 1)、這次實驗加強了我上網(wǎng)查數(shù)檢索問題的能力;( 2)、這次實驗讓我學會分模塊
7、解決問題, 怎樣運用互斥鎖對臨界資源進行管理;( 3)、這次實驗,發(fā)現(xiàn)自己在編程上及一些函數(shù)的認識仍存在較大的問題, 以后應(yīng)該多多實踐,提高自己的反應(yīng)速度,加強邏輯思維能力。附錄:源代碼#include #include #include #include #include using namespace std;bool tools5; /全局變量,用餐工具CRITICAL_SECTION cs; / 信號量 ,在線程中使用,臨界區(qū)class Philosopherprivate:int number;int status;/*標記當前哲學家的狀態(tài),0 表示正在等待( 即處于饑餓狀態(tài) ),1
8、 表示得到兩支筷子正在吃飯 ,2 表示正在思考 */ public:Philosopher(int num=0): status(2), number(num) const int find()return number;const int getinfo() return status; void Change() ; /狀態(tài)改變函數(shù)void dead_lock();/void Philosopher:dead_lock()EnterCriticalSection (&cs) ; /進入臨界區(qū)string s;if(status=1)精選資料,歡迎下載。toolsnumber%5=true;
9、/ tools(number-1)%5=true; status=2;else if(status=2)status=0;/tools(number-1)%5=false;/tools(number-1)%5=true;else if(status=0)toolsnumber%5=false;tools(number-1)%5=false;status=1;LeaveCriticalSection (&cs) ;/ coutChange();int i=pA-getinfo();string str;if(i=0)str=等待 ;else if(i=1)str=就餐 ;else str=思考
10、;return str;string toolstatus(bool a)string state;if(a=true)state=閑;if(a=false)state=用;return state;int main()char con=y; /判斷是否繼續(xù)/ con = n;for(int i=0;i5;i+)toolsi=true; /筷子都未使用,初始化Philosopher P1(1),P2(2),P3(3),P4(4),P5(5);InitializeCriticalSection (&cs) ; /初始化初始化臨界區(qū)cout-狀態(tài)說明示意圖:-endl;cout哲學家 1 號的狀態(tài)
11、 endl;cout筷子 0 的狀態(tài) 筷子 1 的狀態(tài) endl;cout 哲學家5 號的狀態(tài) 哲學家2 號的狀態(tài)endl;cout筷子 4 的狀態(tài) 筷子 2 的狀態(tài) endl;cout哲學家 4 號的狀態(tài) 哲學家 3 號的狀態(tài) endl;cout筷子 3 的狀態(tài) endl;/cout哲學家 3 號的狀態(tài) endl;cout 筷子的狀態(tài),用表示使用中,閑表示空閑中。endl;cout-精選資料,歡迎下載。endl;/cout哲學家們開始生活: endl;/cout當前狀態(tài): ;coutcon;while(con=y)P1.Change();P2.Change();P3.Change();P4.
12、Change();P5.Change();cout 當前狀態(tài)為: endl;coutP1.find()print(&P1)endl;couttoolstatus(tools0)toolstatus(tools1)endl;coutP5.find()print(&P5)P2.find()print(&P2)endl;couttoolstatus(tools4)toolstatus(tools2)endl;coutP4.find()print(&P4)P3.find()print(&P3)endl;couttoolstatus(tools3)endl;cout-endl;coutcon;Sleep(20);while(con=n)P1.dead_lock();P2.dead_lock();P3.dead_lock();P4.dead_lock();P5.dead_lock();cout 死鎖情況 endl;coutP1.find()print(&P1)endl;couttoolstatus(tools0)toolstatus(tools1)endl;coutP5.find()print(&P5)P2.find()print(&P2)endl;couttoolstatus(tools4)toolstatu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州工程技術(shù)學院《醫(yī)學微生物》2023-2024學年第二學期期末試卷
- 南京曉莊學院《機械加工工藝實訓》2023-2024學年第二學期期末試卷
- 2025屆浙江省金華市云富高級中學高三數(shù)學試題5月15日第7周測試題含解析
- 幼兒園大班大雪節(jié)氣教育
- 長沙電力職業(yè)技術(shù)學院《聲樂表演》2023-2024學年第二學期期末試卷
- 成都東軟學院《概率論與數(shù)理統(tǒng)計B》2023-2024學年第一學期期末試卷
- 六盤水幼兒師范高等??茖W校《微劇本創(chuàng)作》2023-2024學年第一學期期末試卷
- 天津中德應(yīng)用技術(shù)大學《分子醫(yī)學實驗》2023-2024學年第一學期期末試卷
- 南京航空航天大學《西方教育哲學史》2023-2024學年第二學期期末試卷
- 中國礦業(yè)大學徐海學院《建筑制圖實驗》2023-2024學年第二學期期末試卷
- 2025年鉛鋅礦項目可行性研究報告
- 防春困防疲勞駕駛課件
- 玻璃更換施工方案
- 2025年中國職工保險互助會貴州省辦事處招聘筆試參考題庫含答案解析
- 2025年生豬屠宰獸醫(yī)衛(wèi)生檢疫人員考試題(附答案)
- 2025-2030垃圾發(fā)電產(chǎn)業(yè)市場深度分析及前景趨勢與投資研究報告
- 出生缺陷預防培訓課件
- 中小學綜合實踐活動課程指導綱要:讓學生更好地了解活動的意義和價值
- 物理-安徽省安慶市2024-2025學年高三下學期第二次模擬考試試卷(安慶二模)試題和答案
- 律師盡職調(diào)查工作方案
- 2024年杭州市糧食收儲有限公司招聘考試真題
評論
0/150
提交評論