![操作系統(tǒng)課程設(shè)計吃水果問題完整版_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/6794b106-9bf1-453c-b3cf-be95b2d9c700/6794b106-9bf1-453c-b3cf-be95b2d9c7001.gif)
![操作系統(tǒng)課程設(shè)計吃水果問題完整版_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/6794b106-9bf1-453c-b3cf-be95b2d9c700/6794b106-9bf1-453c-b3cf-be95b2d9c7002.gif)
![操作系統(tǒng)課程設(shè)計吃水果問題完整版_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/6794b106-9bf1-453c-b3cf-be95b2d9c700/6794b106-9bf1-453c-b3cf-be95b2d9c7003.gif)
![操作系統(tǒng)課程設(shè)計吃水果問題完整版_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/6794b106-9bf1-453c-b3cf-be95b2d9c700/6794b106-9bf1-453c-b3cf-be95b2d9c7004.gif)
![操作系統(tǒng)課程設(shè)計吃水果問題完整版_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/6794b106-9bf1-453c-b3cf-be95b2d9c700/6794b106-9bf1-453c-b3cf-be95b2d9c7005.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、沈陽理工大學(xué)課程設(shè)計專用紙 1目目錄錄1 題目內(nèi)容及要求題目內(nèi)容及要求.21.1題目名稱.21.2題目描述.21.3解題思路.21.4程序清單.61.5提交結(jié)果框圖.162 總結(jié)總結(jié).203 參考文獻參考文獻.20沈陽理工大學(xué)課程設(shè)計專用紙 21 題目內(nèi)容及要求題目內(nèi)容及要求1.1 題目名稱題目名稱進程同步模擬設(shè)計:吃水果問題1.2 題目描述題目描述桌子上有一只盤子,最多可容納兩個水果,每次只能放入或者取出一個水果。爸爸專門向盤子中放蘋果,媽媽專門向盤子中放橘子,兩個兒子專門等待吃盤子中的橘子,兩個女兒專門等吃盤子中的蘋果。1.3 解題思路解題思路將問題轉(zhuǎn)換為信號量上的資源分配類型問題: 這是
2、進程同步問題的模擬,可以把向盤子放或取水果的每一個過程可以轉(zhuǎn)為一個進程的操作,這些進程是互斥的,同時也存在一定的同步關(guān)系。通過編程實踐時,實際是隨機的調(diào)用人一個進程的操作,而這些進程的操作相當(dāng)于程序中的函數(shù)調(diào)用。而計算機在執(zhí)行時每一個時刻只能執(zhí)行一個操作,這就默認了互斥。同步的模擬可以類似于函數(shù)調(diào)用時的前提關(guān)系即先決條件。這樣進程同步模擬就完全可以通過函數(shù)的調(diào)用來實現(xiàn)。 具體的每一個操作的對應(yīng)的函數(shù)的關(guān)系: 爸爸向盤子中放一個蘋果:Father() 媽媽向盤子中放一個橘子:Mother() 兒子 1 從盤子取一個橘子:Son1() 兒子 2 從盤子取一個橘子:Son2()女兒 1 從盤子取一個
3、蘋果:Daugther1()兒子 1 從盤子取一個蘋果:Daugther2()沈陽理工大學(xué)課程設(shè)計專用紙 3具體實現(xiàn)方案: (1)用一個整型變量 Plate_Size 表示盤子,初始值為 0,當(dāng)放水果時Plate_Size 加 1,取水果時 Plate_Size 減 1。變量 Plate_Size 的最大值為2,當(dāng)為 2 時表示盤子已經(jīng)滿,此時若進行放水果操作,放水果將處于等待狀態(tài);為 0 時表示盤子為空,此時若進行取水果操作,取水果操作將處于等待狀態(tài)。(2)整型變量 orange 和 apple 分別表示盤子中的橘子和蘋果數(shù)目,初始都為 0,Plate_Size=apple+orange。(
4、3)用 6 個 bool 型的變量 Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag 表示六個進程是否處于等待狀態(tài)。處于等待時,變量值為 true。(4)兩個放水果進程進程同時處于等待狀態(tài)時,若有取水果的操作將自動執(zhí)行等待的放水果進程,執(zhí)行按等待的先后順序;兩個取蘋果或橘子進程同時候處于等待狀態(tài),若有放蘋果或橘子的操作將自動執(zhí)行等待的取進程,進行按等待的先后順序。(5)用一個隨機的函數(shù)產(chǎn)生 05 的 6 個整數(shù),分別對應(yīng)六個進程的調(diào)用。沈陽理工大學(xué)課程設(shè)計專用紙 4放水果操作流程圖設(shè)計(以 Father 為例
5、,Mother 類似):否Father 操作:Plate_Size=2否Daugther1 或 Daugher2 處于等待狀態(tài)是按等待先后順序調(diào)用Daugther1 或 Daughter2 操作是Father 進程處于等待狀態(tài)Father 進程調(diào)用:apple+1Plate_Size+1,Print()函數(shù)調(diào)用返回 圖 1 Father 放水果操作流程圖沈陽理工大學(xué)課程設(shè)計專用紙 5取水果操作流程圖設(shè)計(以 Son 為例,Daughter 類似):Son 操作:orange=0否否Father 或 Mother 處于等待狀態(tài)是按等待先后順序調(diào)用Father 或 Mother 操作是Son 進程
6、處于等待狀態(tài)Son 進程調(diào)用:orange-1Plate_Size-1,Print()函數(shù)調(diào)用返回 圖 2 Son 取水果(橘子)操作流程圖沈陽理工大學(xué)課程設(shè)計專用紙 61.4 程序清單程序清單#include #include #include #include int apple=0;int orange=0;bool Father_lag;bool Mother_lag;bool Son1_lag;bool Son2_lag;int son_a;int Daughter_b;bool Daughter1_lag;bool Daughter2_lag;void Print()cout 現(xiàn)在
7、盤子里有apple個蘋果,orange個橘子,共有apple+orange個水果.endl;if(Father_lag=true)cout Father 進程處于等待狀態(tài),endl;if(Mother_lag=true)cout Mother 進程處于等待狀態(tài),endl;if(Son1_lag=true)cout Son1 進程處于等待狀態(tài),endl;if(Son2_lag=true) cout Son2 進程處于等待狀態(tài), endl;if(Daughter1_lag=true)cout Daughter1 進程處于等待狀態(tài),endl;if(Daughter2_lag=true)cout Da
8、ughter2 進程處于等待狀態(tài),endl;if(Father_lag=false)&(Mother_lag=false)&(Son1_lag=false)&(Son2_lag=false)&(Daughter1_lag=false)&(Daughter2_lag=false)!=true)coutendl;void Father() /Father 進程apple+;Print();void Mother() /Mother 進程orange+;沈陽理工大學(xué)課程設(shè)計專用紙 7Print();void Son1() /Son1 進程orange-;Print();void Son2() /So
9、n2 進程orange-;Print();void Daughter1() /Daughter1 進程apple-;Print();void Daughter2() /Daughter2 進程apple-;Print();void main()int i;int Plate_Size;/水果數(shù)量int MonFa_c;/用于爸爸媽媽等待次序的區(qū)別int Son_a;/用于兩個兒子等待次序的區(qū)別int daughter_b;/用于兩個女兒等待次序的區(qū)別int k;/產(chǎn)生進程調(diào)用的數(shù)量srand(unsigned)time(NULL);/srand()函數(shù)產(chǎn)生一個以當(dāng)前時間開始的隨機種子 for(
10、k=0;k10;k+) coutendl;cout*第k+1次操作*endl;i=rand()%6; /隨進生成 1-5.Plate_Size=apple+orange;switch(i)case 0:cout Father 調(diào)用.endl;沈陽理工大學(xué)課程設(shè)計專用紙 8if(Plate_Size=2)Father_lag=true;/Father()等待Print();if(Mother_lag=false)MonFa_c=1;elseFather();if(Daughter1_lag=true)&(Daughter2_lag=true)if(Daughter_b=1)Daughter1_l
11、ag=false;/Daughter1 等待取消cout 處于等待的 Daughter1 自動被調(diào)用endl;Daughter1(); /處于等待的 Daughter1 自動調(diào)用Daughter_b=2;else Daughter2_lag=false;/Daughter2 等待取消cout 處于等待的 Daughter2 自動被調(diào)用endl;Daughter2(); /處于等待的 Daughter2()自動調(diào)用Daughter_b=1;elseif(Daughter1_lag=true)Daughter1_lag=false;/Daughter1 等待取消cout 處于等待的 Daughte
12、r1 自動被調(diào)用endl;Daughter1(); /處于等待的 Daughter1()自動調(diào)用Daughter_b=0;else if(Daughter2_lag=true)Daughter2_lag=false;/Daughter2 等待取消cout 處于等待的 Daughter1 自動被調(diào)用endl;沈陽理工大學(xué)課程設(shè)計專用紙 9Daughter2(); /處于等待的 Daughter2()自動調(diào)用Daughter_b=0;break;case 1:cout Mother 調(diào)用.endl;if(Plate_Size=2)Mother_lag=true; /等待Print();if(Fat
13、her_lag=false)MonFa_c=2;elseMother();if(Son1_lag=true)&(Son2_lag=true)if(Son_a=1)Son1_lag=false;/Son1 等待取消cout 處于等待的 Son1 自動被調(diào)用endl;Son1(); /處于等待的 Son1()自動調(diào)用Son_a=2;else Son2_lag=false;/Son2 等待取消cout 處于等待的 Son2 自動被調(diào)用endl;Son2(); /處于等待的 Son2()自動調(diào)用Son_a=1;else if(Son1_lag=true)Son1_lag=false; /Son1 等待
14、取消cout 處于等待的 Son1 自動被調(diào)用endl;沈陽理工大學(xué)課程設(shè)計專用紙 10Son1(); /處于等待的 Son1()自動調(diào)用Son_a=0;else if(Son2_lag=true)Son2_lag=false; /Son2 等待取消cout 處于等待的 Son2 自動被調(diào)用endl;Son2(); /處于等待的 Son2()自動調(diào)用Son_a=0;break;case 2: cout Son1 調(diào)用.endl;if(orange=0)Son1_lag=true; /Son1 處于等待Print();if(Son2_lag=false)Son_a=1; /用于判斷 Son1 和
15、 Son2 等待的先后性elseSon1();if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1) /Father 和 Mother 同時處于等待,但 Father 先等待,因此先調(diào)用Father_lag=false;cout 處于等待的 Father 自動被調(diào)用endl;Father();MonFa_c=2;else /Father 和 Mother 同時處于等待,但 Mother 先等待,因此先調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動被調(diào)用endl;Mother();沈陽理工大學(xué)課程設(shè)計專用紙 11Mon
16、Fa_c=1;elseif(Father_lag=true) /只有 Father 處于等待,調(diào)用Father_lag=false;cout 處于等待的 Father 自動被調(diào)用endl;Father();MonFa_c=0;else if(Mother_lag=true)/只有 Mother 處于等待,調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動被調(diào)用endl;Mother();MonFa_c=0;break;case 3:cout Son2 調(diào)用.endl;if(orange=0)Son2_lag=true; /Son2 處于等待Print();if(So
17、n1_lag=false)Son_a=2;elseSon2();if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1)/Father 和 Mother 同時處于等待,但 Father 先等待,因此先調(diào)用Father_lag=false;cout 處于等待的 Father 自動被調(diào)用endl;沈陽理工大學(xué)課程設(shè)計專用紙 12Father();MonFa_c=2;else /Father 和 Mother 同時處于等待,但 Mother 先等待,因此先調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動被調(diào)用endl;Moth
18、er();MonFa_c=1;elseif(Father_lag=true) /只有 Father 處于等待,調(diào)用Father_lag=false;cout 處于等待的 Father 自動被調(diào)用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 處于等待,調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動被調(diào)用endl;Mother();MonFa_c=0;break;case 4:cout Daughter1 調(diào)用.endl;if(apple=0)Daughter1_lag=true; /Daug
19、hter1 等待Print();if(Daughter2_lag=false)Daughter_b=1;else沈陽理工大學(xué)課程設(shè)計專用紙 13Daughter1(); if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1) /Father 和 Mother 同時處于等待,但 Father 先 /等待,因此先調(diào)用Father_lag=false;cout 處于等待的 Father 自動被調(diào)用endl;Father();MonFa_c=2;else /Father 和 Mother 同時處于等待,但 Mother 先等待,因此先調(diào)用Mother_la
20、g=false;cout 處于等待的 Mother 自動被調(diào)用endl;Mother();MonFa_c=1;elseif(Father_lag=true) /只有 Father 處于等待,調(diào)用Father_lag=false;cout 處于等待的 Father 自動被調(diào)用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 處于等待,調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動被調(diào)用endl;Mother();MonFa_c=0;break;case 5:沈陽理工大學(xué)課程設(shè)計專用紙 14cou
21、t Daughter2 調(diào)用.endl;if(apple=0)Daughter2_lag=true;/Daughter2 等待Print();if(Daughter1_lag=false)Daughter_b=2;elseDaughter2();if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1) /Father 和 Mother 同時處于等待,但 Father 先等待,因此先調(diào)用Father_lag=false;cout 處于等待的 Father 自動被調(diào)用endl;Father();MonFa_c=2;else /Father 和 Mothe
22、r 同時處于等待,但 Mother 先等待,因此先調(diào)用 Mother_lag=false;cout 處于等待的 Mother 自動被調(diào)用endl;Mother();MonFa_c=1;else if(Father_lag=true) /只有 Father 處于等待,調(diào)用 Father_lag=false;cout 處于等待的 Father 自動被調(diào)用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 處于等待,調(diào)用 Mother_lag=false;cout 處于等待的 Mother 自動被調(diào)用endl;沈陽理工大學(xué)課程設(shè)計專用紙 15Mother();MonFa_c=0;break;沈陽理工大學(xué)課程設(shè)計專用紙 161.5 提交結(jié)果框圖提交結(jié)果框圖由于程序是模擬產(chǎn)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度工傷認定與賠償一站式服務(wù)合同
- 2025年度綠色環(huán)保新型材料買賣合同書
- 2025年供電行業(yè)節(jié)能減排合同
- 2025年度智能化建筑勞務(wù)承包管理合同
- 2025年度商業(yè)空間局部裝修設(shè)計施工一體化合同
- 2025年度國企勞動合同:員工培訓(xùn)與發(fā)展基金管理協(xié)議
- 2025年度建筑節(jié)能改造項目竣工驗收合同
- 2025年度環(huán)保項目污染治理設(shè)施建設(shè)合同
- 2025年度包裝設(shè)備租賃服務(wù)合同范本
- 2025年度二手別墅交易合同規(guī)范文本
- 2025年度高端商務(wù)車輛聘用司機勞動合同模板(專業(yè)版)4篇
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 五年級上冊脫式計算100題及答案
- 2006年度銀行業(yè)金融機構(gòu)信息科技風(fēng)險評價審計要點
- 火災(zāi)隱患整改登記表
- 普通地質(zhì)學(xué)教材
- 反恐C-TPAT程序文件整套(通用)
- 2022年全國高考詩歌鑒賞試題-教學(xué)課件
- 天津華寧KTC101說明書
- 2023-2024學(xué)年浙江省杭州市小學(xué)語文六年級上冊期末深度自測試題
- 縣道及以上公路保潔考核檢查評分表
評論
0/150
提交評論