




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)目目錄錄精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)1 題目?jī)?nèi)容及要求題目?jī)?nèi)容及要求1.1 題目名稱題目名稱進(jìn)程同步模擬設(shè)計(jì):吃水果問(wèn)題1.2 題目描述題目描述桌子上有一只盤(pán)子,最多可容納兩個(gè)水果,每次只能放入或者取出一個(gè)水果。爸爸專門(mén)向盤(pán)子中放蘋(píng)果,媽媽專門(mén)向盤(pán)子中放橘子,兩個(gè)兒子專門(mén)等待吃盤(pán)子中的橘子,兩個(gè)女兒專門(mén)等吃盤(pán)子中的蘋(píng)果。1.3 解題思路解題思路將問(wèn)題轉(zhuǎn)換為信號(hào)量上的資源分配類型問(wèn)題: 這是進(jìn)程同步問(wèn)題的模擬,可以把向盤(pán)子放或取水果的每一個(gè)過(guò)程可以轉(zhuǎn)為一個(gè)進(jìn)程的操作,這些進(jìn)程是互斥的,同時(shí)也存在一定的同步關(guān)系。通過(guò)編程實(shí)踐時(shí),實(shí)際是隨機(jī)的調(diào)
2、用人一個(gè)進(jìn)程的操作,而這些進(jìn)程的操作相當(dāng)于程序中的函數(shù)調(diào)用。而計(jì)算機(jī)在執(zhí)行時(shí)每一個(gè)時(shí)刻只能執(zhí)行一個(gè)操作,這就默認(rèn)了互斥。同步的模擬可以類似于函數(shù)調(diào)用時(shí)的前提關(guān)系即先決條件。這樣進(jìn)程同步模擬就完全可以通過(guò)函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)。 具體的每一個(gè)操作的對(duì)應(yīng)的函數(shù)的關(guān)系: 爸爸向盤(pán)子中放一個(gè)蘋(píng)果:Father() 媽媽向盤(pán)子中放一個(gè)橘子:Mother() 兒子 1 從盤(pán)子取一個(gè)橘子:Son1() 兒子 2 從盤(pán)子取一個(gè)橘子:Son2()女兒 1 從盤(pán)子取一個(gè)蘋(píng)果:Daugther1()兒子 1 從盤(pán)子取一個(gè)蘋(píng)果:Daugther2()精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)具體實(shí)現(xiàn)方案: (1)用一個(gè)整型
3、變量 Plate_Size 表示盤(pán)子,初始值為 0,當(dāng)放水果時(shí)Plate_Size 加 1,取水果時(shí) Plate_Size 減 1。變量 Plate_Size 的最大值為2,當(dāng)為 2 時(shí)表示盤(pán)子已經(jīng)滿,此時(shí)若進(jìn)行放水果操作,放水果將處于等待狀態(tài);為 0 時(shí)表示盤(pán)子為空,此時(shí)若進(jìn)行取水果操作,取水果操作將處于等待狀態(tài)。(2)整型變量 orange 和 apple 分別表示盤(pán)子中的橘子和蘋(píng)果數(shù)目,初始都為 0,Plate_Size=apple+orange。(3)用 6 個(gè) bool 型的變量 Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_la
4、g,Daughter2_lag 表示六個(gè)進(jìn)程是否處于等待狀態(tài)。處于等待時(shí),變量值為 true。(4)兩個(gè)放水果進(jìn)程進(jìn)程同時(shí)處于等待狀態(tài)時(shí),若有取水果的操作將自動(dòng)執(zhí)行等待的放水果進(jìn)程,執(zhí)行按等待的先后順序;兩個(gè)取蘋(píng)果或橘子進(jìn)程同時(shí)候處于等待狀態(tài),若有放蘋(píng)果或橘子的操作將自動(dòng)執(zhí)行等待的取進(jìn)程,進(jìn)行按等待的先后順序。(5)用一個(gè)隨機(jī)的函數(shù)產(chǎn)生 05 的 6 個(gè)整數(shù),分別對(duì)應(yīng)六個(gè)進(jìn)程的調(diào)用。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)放水果操作流程圖設(shè)計(jì)(以 Father 為例,Mother 類似):否Father 操作:Plate_Size=2否Daugther1 或 Daugher2 處于等待狀態(tài)是
5、按等待先后順序調(diào)用Daugther1 或 Daughter2 操作是Father 進(jìn)程處于等待狀態(tài)Father 進(jìn)程調(diào)用:apple+1Plate_Size+1,Print()函數(shù)調(diào)用返回 圖 1 Father 放水果操作流程圖精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)取水果操作流程圖設(shè)計(jì)(以 Son 為例,Daughter 類似):Son 操作:orange=0否否Father 或 Mother 處于等待狀態(tài)是按等待先后順序調(diào)用Father 或 Mother 操作是Son 進(jìn)程處于等待狀態(tài)Son 進(jìn)程調(diào)用:orange-1Plate_Size-1,Print()函數(shù)調(diào)用返回 圖 2 Son
6、取水果(橘子)操作流程圖精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)1.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)在盤(pán)子里有apple個(gè)蘋(píng)果,orange個(gè)橘子,共有apple+orange個(gè)水果.endl;if(Fat
7、her_lag=true)cout Father 進(jìn)程處于等待狀態(tài),endl;if(Mother_lag=true)cout Mother 進(jìn)程處于等待狀態(tài),endl;if(Son1_lag=true)cout Son1 進(jìn)程處于等待狀態(tài),endl;if(Son2_lag=true) cout Son2 進(jìn)程處于等待狀態(tài), endl;if(Daughter1_lag=true)cout Daughter1 進(jìn)程處于等待狀態(tài),endl;if(Daughter2_lag=true)cout Daughter2 進(jìn)程處于等待狀態(tài),endl;if(Father_lag=false)&(Moth
8、er_lag=false)&(Son1_lag=false)&(Son2_lag=false)&(Daughter1_lag=false)&(Daughter2_lag=false)!=true)coutendl;void Father() /Father 進(jìn)程apple+;Print();void Mother() /Mother 進(jìn)程orange+;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Print();void Son1() /Son1 進(jìn)程orange-;Print();void Son2() /Son2 進(jìn)程orange-;Print();void
9、Daughter1() /Daughter1 進(jìn)程apple-;Print();void Daughter2() /Daughter2 進(jìn)程apple-;Print();void main()int i;int Plate_Size;/水果數(shù)量int MonFa_c;/用于爸爸媽媽等待次序的區(qū)別int Son_a;/用于兩個(gè)兒子等待次序的區(qū)別int daughter_b;/用于兩個(gè)女兒等待次序的區(qū)別int k;/產(chǎn)生進(jìn)程調(diào)用的數(shù)量srand(unsigned)time(NULL);/srand()函數(shù)產(chǎn)生一個(gè)以當(dāng)前時(shí)間開(kāi)始的隨機(jī)種子 for(k=0;k10;k+) coutendl;cout*
10、第k+1次操作*endl;i=rand()%6; /隨進(jìn)生成 1-5.Plate_Size=apple+orange;switch(i)case 0:cout Father 調(diào)用.endl;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)if(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_lag=false;/Daught
11、er1 等待取消cout 處于等待的 Daughter1 自動(dòng)被調(diào)用endl;Daughter1(); /處于等待的 Daughter1 自動(dòng)調(diào)用Daughter_b=2;else Daughter2_lag=false;/Daughter2 等待取消cout 處于等待的 Daughter2 自動(dòng)被調(diào)用endl;Daughter2(); /處于等待的 Daughter2()自動(dòng)調(diào)用Daughter_b=1;elseif(Daughter1_lag=true)Daughter1_lag=false;/Daughter1 等待取消cout 處于等待的 Daughter1 自動(dòng)被調(diào)用endl;Dau
12、ghter1(); /處于等待的 Daughter1()自動(dòng)調(diào)用Daughter_b=0;else if(Daughter2_lag=true)Daughter2_lag=false;/Daughter2 等待取消cout 處于等待的 Daughter1 自動(dòng)被調(diào)用endl;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Daughter2(); /處于等待的 Daughter2()自動(dòng)調(diào)用Daughter_b=0;break;case 1:cout Mother 調(diào)用.endl;if(Plate_Size=2)Mother_lag=true; /等待Print();if(Father_lag=fa
13、lse)MonFa_c=2;elseMother();if(Son1_lag=true)&(Son2_lag=true)if(Son_a=1)Son1_lag=false;/Son1 等待取消cout 處于等待的 Son1 自動(dòng)被調(diào)用endl;Son1(); /處于等待的 Son1()自動(dòng)調(diào)用Son_a=2;else Son2_lag=false;/Son2 等待取消cout 處于等待的 Son2 自動(dòng)被調(diào)用endl;Son2(); /處于等待的 Son2()自動(dòng)調(diào)用Son_a=1;else if(Son1_lag=true)Son1_lag=false; /Son1 等待取消cout
14、 處于等待的 Son1 自動(dòng)被調(diào)用endl;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Son1(); /處于等待的 Son1()自動(dòng)調(diào)用Son_a=0;else if(Son2_lag=true)Son2_lag=false; /Son2 等待取消cout 處于等待的 Son2 自動(dòng)被調(diào)用endl;Son2(); /處于等待的 Son2()自動(dòng)調(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 同時(shí)處于等待,但 Father 先等待,因此先調(diào)用Father_lag=false;cout 處于等待的 Father 自動(dòng)被調(diào)用endl;Father();MonFa_c=2;else /Father 和 Mother 同時(shí)處于等待,但 Mother 先等待,因此先調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動(dòng)被調(diào)用endl;Mother();精選優(yōu)質(zhì)文檔-傾情為你奉上專心-
16、專注-專業(yè)MonFa_c=1;elseif(Father_lag=true) /只有 Father 處于等待,調(diào)用Father_lag=false;cout 處于等待的 Father 自動(dòng)被調(diào)用endl;Father();MonFa_c=0;else if(Mother_lag=true)/只有 Mother 處于等待,調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動(dòng)被調(diào)用endl;Mother();MonFa_c=0;break;case 3:cout Son2 調(diào)用.endl;if(orange=0)Son2_lag=true; /Son2 處于等待Print
17、();if(Son1_lag=false)Son_a=2;elseSon2();if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1)/Father 和 Mother 同時(shí)處于等待,但 Father 先等待,因此先調(diào)用Father_lag=false;cout 處于等待的 Father 自動(dòng)被調(diào)用endl;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Father();MonFa_c=2;else /Father 和 Mother 同時(shí)處于等待,但 Mother 先等待,因此先調(diào)用Mother_lag=false;cout 處于等待的 Moth
18、er 自動(dòng)被調(diào)用endl;Mother();MonFa_c=1;elseif(Father_lag=true) /只有 Father 處于等待,調(diào)用Father_lag=false;cout 處于等待的 Father 自動(dòng)被調(diào)用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 處于等待,調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動(dòng)被調(diào)用endl;Mother();MonFa_c=0;break;case 4:cout Daughter1 調(diào)用.endl;if(apple=0)Daughter
19、1_lag=true; /Daughter1 等待Print();if(Daughter2_lag=false)Daughter_b=1;else精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Daughter1(); if(Father_lag=true)&(Mother_lag=true)if(MonFa_c=1) /Father 和 Mother 同時(shí)處于等待,但 Father 先 /等待,因此先調(diào)用Father_lag=false;cout 處于等待的 Father 自動(dòng)被調(diào)用endl;Father();MonFa_c=2;else /Father 和 Mother 同時(shí)處于等待,但
20、 Mother 先等待,因此先調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動(dòng)被調(diào)用endl;Mother();MonFa_c=1;elseif(Father_lag=true) /只有 Father 處于等待,調(diào)用Father_lag=false;cout 處于等待的 Father 自動(dòng)被調(diào)用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 處于等待,調(diào)用Mother_lag=false;cout 處于等待的 Mother 自動(dòng)被調(diào)用endl;Mother();MonFa_c=0;break;
21、case 5:精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)cout 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 同時(shí)處于等待,但 Father 先等待,因此先調(diào)用Father_lag=false;cout 處于等待的 Father 自動(dòng)被調(diào)用endl;Fath
22、er();MonFa_c=2;else /Father 和 Mother 同時(shí)處于等待,但 Mother 先等待,因此先調(diào)用 Mother_lag=false;cout 處于等待的 Mother 自動(dòng)被調(diào)用endl;Mother();MonFa_c=1;else if(Father_lag=true) /只有 Father 處于等待,調(diào)用 Father_lag=false;cout 處于等待的 Father 自動(dòng)被調(diào)用endl;Father();MonFa_c=0;else if(Mother_lag=true) /只有 Mother 處于等待,調(diào)用 Mother_lag=false;cout 處于等待的 Mother 自動(dòng)被調(diào)用endl;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Mother();MonFa_c=0;break;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)1.5 提交結(jié)果框圖提交結(jié)果框圖由于程序是模擬產(chǎn)生 10 次隨機(jī)的操作,執(zhí)行
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- QC文件員工作總結(jié)
- 培訓(xùn)啟動(dòng)課件在哪下
- 課題研究的目的
- 本科生答辯范文
- 傳統(tǒng)文化核心概念界定
- 關(guān)于性教育的論文
- 急診科護(hù)理的亮點(diǎn)案例展示
- 蜘蛛創(chuàng)意美術(shù)課件
- 產(chǎn)婦護(hù)理培訓(xùn)
- 脫硝工藝培訓(xùn)課件
- DB43-T 2745-2023 地理標(biāo)志產(chǎn)品 汨羅粽子
- 乒乓球體育課教案
- 竣工財(cái)務(wù)決算報(bào)表模板
- NB-T47003.1-2022常壓容器第1部分:鋼制焊接常壓容器
- 云南紅河州一中2025屆高一下數(shù)學(xué)期末綜合測(cè)試試題含解析
- 2024北京西城公安分局流管員招聘筆試參考題庫(kù)含答案解析
- 2021利達(dá)JB-QG-LD988EL JB-QT-LD988EL 火災(zāi)報(bào)警控制器 消防聯(lián)動(dòng)控制器調(diào)試手冊(cè)
- 浙二醫(yī)院護(hù)士進(jìn)修心得體會(huì)6篇
- 2024年中鐵(天津)軌道交通投資建設(shè)限公司運(yùn)營(yíng)管理人員招聘5人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 2021年中國(guó)社會(huì)科學(xué)院大學(xué)統(tǒng)計(jì)學(xué)原理期末精練試卷
- 2024年《軍事理論》考試題庫(kù)附答案(含各題型)
評(píng)論
0/150
提交評(píng)論