版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《操作系統(tǒng)》課程設(shè)計(jì)</p><p><b> 題目名稱:蘋果問(wèn)題</b></p><p> 專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)</p><p><b> 班級(jí): </b></p><p><b> 姓名: </b></p><p>
2、<b> 學(xué)號(hào): </b></p><p><b> 目錄</b></p><p><b> 目錄1</b></p><p> 1.設(shè)計(jì)題目與要求2</p><p><b> 1.1設(shè)計(jì)目的2</b></p><p>
3、;<b> 1.2設(shè)計(jì)要求2</b></p><p> 2. 總體設(shè)計(jì)思想2</p><p> 2.1總體設(shè)計(jì)思想2</p><p><b> 3. 功能設(shè)計(jì)3</b></p><p> 3.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)3</p><p><b> 3.2
4、模塊說(shuō)明3</b></p><p> 3.3 各模塊的算法流程圖4</p><p> 3.4 P、V原語(yǔ)的描述7</p><p> 4 .開發(fā)平臺(tái)及程序清單的主要部分8</p><p><b> 4.1開發(fā)平臺(tái)8</b></p><p> 5. 運(yùn)行結(jié)果與運(yùn)行情況
5、分析9</p><p><b> 5.1運(yùn)行結(jié)果9</b></p><p> 6. 自我評(píng)價(jià)與總結(jié)10</p><p> 7. 參考資料11</p><p><b> 附錄12</b></p><p><b> 程序源代碼:13</b&g
6、t;</p><p><b> 1.設(shè)計(jì)題目與要求</b></p><p><b> 1.1設(shè)計(jì)目的</b></p><p> 通過(guò)實(shí)現(xiàn)吃水果問(wèn)題的同步,深入了解和掌握進(jìn)程同步的原理。</p><p><b> 1.2設(shè)計(jì)要求</b></p><p&
7、gt;<b> 吃水果問(wèn)題的描述:</b></p><p> 桌子上有一只盤子,最多可容納兩個(gè)水果,每次只能放入或者取出一個(gè)水果。爸爸專門向盤子中放蘋果(apple),媽媽專門向盤子中放橘子(orange),兩個(gè)兒子專門等待吃盤子中的橘子,兩個(gè)女兒專門等吃盤子中的蘋果。</p><p><b> 2. 總體設(shè)計(jì)思想</b></p>
8、;<p><b> 2.1總體設(shè)計(jì)思想</b></p><p> 這是進(jìn)程同步與互斥問(wèn)題的模擬,可以把向盤子放或取水果的每一個(gè)過(guò)程可以轉(zhuǎn)為一個(gè)進(jìn)程的操作,這些進(jìn)程是互斥的,同時(shí)也存在一定的同步關(guān)系。通過(guò)編程實(shí)踐時(shí),實(shí)際是隨機(jī)的調(diào)用一個(gè)進(jìn)程的操作,而這些進(jìn)程的操作相當(dāng)于程序中的函數(shù)調(diào)用。而計(jì)算機(jī)在執(zhí)行時(shí)每一個(gè)時(shí)刻只能執(zhí)行一個(gè)操作,這就是互斥的表現(xiàn)。同步的模擬可以類似于函數(shù)調(diào)用
9、時(shí)的前提關(guān)系即先決條件。這樣進(jìn)程同步模擬就完全可以通過(guò)函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)。</p><p> 具體的每一個(gè)操作的對(duì)應(yīng)的函數(shù)的關(guān)系:</p><p> 爸爸向盤子中放一個(gè)蘋果:Father()</p><p> 媽媽向盤子中放一個(gè)橘子:Mother()</p><p> 兒子1從盤子取一個(gè)橘子:Son1()</p><
10、p> 兒子2從盤子取一個(gè)橘子:Son2()</p><p> 女兒1從盤子取一個(gè)橘子:Daugther1()</p><p> 女兒2從盤子取一個(gè)橘子:Daugther2()</p><p><b> 3. 功能設(shè)計(jì)</b></p><p> 3.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</p><p>
11、 (1)用一個(gè)整型變量Plate_Size表示盤子里的水果數(shù)量,初始值為0,當(dāng)放水果時(shí)Plate_Size加1,取水果時(shí)Plate_Size減1。變量Plate_Size的最大值為2,當(dāng)為2時(shí)表示盤子已經(jīng)滿,此時(shí)若進(jìn)行放水果操作,放水果將處于等待狀態(tài);為0時(shí)表示盤子為空,此時(shí)若進(jìn)行取水果操作,取水果操作將處于等待狀態(tài),Plate_Size是爸爸和媽媽進(jìn)行放水果的私有信號(hào)量。</p><p> (2)整型變量o
12、range和apple分別表示盤子中的橘子和蘋果數(shù)目,初始都為0,其中orange是兒子的私有變量,apple是女兒的私有變量,盤子中的總水果數(shù)是 Plate_Size=apple+orange。</p><p> (3)用6個(gè)bool型的變量 Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag表示六個(gè)進(jìn)程是否處于等待狀態(tài)。處于
13、等待時(shí),變量值為true。</p><p> (4)兩個(gè)放水果進(jìn)程同時(shí)處于等待狀態(tài)時(shí),若有取水果的操作將自動(dòng)執(zhí)行等待的放水果進(jìn)程,執(zhí)行按等待的先后順序自動(dòng)調(diào)用;兩個(gè)取蘋果或橘子進(jìn)程同時(shí)候處于等待狀態(tài),若有放蘋果或橘子的操作將自動(dòng)執(zhí)行等待的取進(jìn)程,進(jìn)行按等待的先后順序自動(dòng)調(diào)用。</p><p> (5)用一個(gè)隨機(jī)的函數(shù)產(chǎn)生0—5的6個(gè)整數(shù),分別對(duì)應(yīng)六個(gè)進(jìn)程的調(diào)用。</p>
14、<p><b> 3.2模塊說(shuō)明</b></p><p><b> 3.2.1 主函數(shù)</b></p><p> 用一個(gè)隨機(jī)的函數(shù)產(chǎn)生0—5的6個(gè)整數(shù),即 i=rand()%6,分別對(duì)應(yīng)六個(gè)進(jìn)程的調(diào)用,調(diào)用的次數(shù)可以通過(guò)修改K值來(lái)實(shí)現(xiàn),for(k=0;k<10;k++),本程序共產(chǎn)生了10次隨機(jī)的調(diào)用進(jìn)程。</p>
15、;<p> 3.2.2 6個(gè)進(jìn)程函數(shù)</p><p> 爸爸向盤子中放一個(gè)蘋果操作:Father()</p><p> 媽媽向盤子中放一個(gè)橘子操作:Mother()</p><p> 兒子1從盤子取一個(gè)橘子操作:Son1()</p><p> 兒子2從盤子取一個(gè)橘子操作:Son2()</p><p
16、> 女兒1從盤子取一個(gè)橘子操作:Daugther1()</p><p> 女兒2從盤子取一個(gè)橘子操作:Daugther2()</p><p> 3.2.3 Print函數(shù)</p><p> 用于輸出盤子中蘋果和橘子的個(gè)數(shù),水果總個(gè)數(shù)及哪些進(jìn)程處于等待狀態(tài)。</p><p> 3.3 各模塊的算法流程圖</p>
17、<p> 3.3.1放水果操作</p><p> A、爸爸放蘋果進(jìn)程的操作流程圖:</p><p> B、媽媽放橘子進(jìn)程的操作流程圖</p><p> 3.3.2取水果操作</p><p> 兒子1取橘子的操作流程圖</p><p> 女兒i取蘋果的操作流程圖</p><p&g
18、t; 3.4 P、V原語(yǔ)的描述</p><p> Semaphore Plate_Size</p><p> Semaphore apple</p><p> Semaphore orange</p><p><b> Father()</b></p><p><b>
19、 {</b></p><p> While(true)</p><p><b> {</b></p><p> P(Plate_Size)</p><p><b> P(mutex)</b></p><p> 父親向盤子中放進(jìn)一個(gè)蘋果</p>
20、;<p><b> V(apple)</b></p><p><b> V(mutex)</b></p><p><b> }</b></p><p><b> }</b></p><p><b> Mother()<
21、;/b></p><p><b> {</b></p><p> While(true)</p><p><b> {</b></p><p> P(Plate_Size)</p><p><b> P(mutex)</b></p&
22、gt;<p> 母親向盤子中放進(jìn)一個(gè)桔子</p><p><b> V(orange)</b></p><p><b> V(mutex)</b></p><p><b> }</b></p><p><b> }</b></
23、p><p><b> Son(i)</b></p><p><b> {</b></p><p> While(true)</p><p><b> {</b></p><p> P(Plate_Size)</p><p>
24、<b> P(mutex)</b></p><p><b> P(apple)</b></p><p> 兒子從盤子中走一個(gè)桔子</p><p><b> V(orange)</b></p><p><b> V(mutex)</b></p
25、><p><b> }</b></p><p><b> }</b></p><p> Daughter (i)</p><p><b> {</b></p><p> While(true)</p><p><b&g
26、t; {</b></p><p> P(Plate_Size)</p><p><b> P(mutex)</b></p><p> 女兒從盤子中走一個(gè)蘋果</p><p><b> V(apple)</b></p><p><b> V(m
27、utex)</b></p><p><b> }</b></p><p><b> }</b></p><p> 4 .開發(fā)平臺(tái)及程序清單的主要部分</p><p><b> 4.1開發(fā)平臺(tái)</b></p><p> ?。?)使用系統(tǒng)
28、:Windows XP</p><p> (2)使用語(yǔ)言:C++</p><p> ?。?)開發(fā)工具:Visual C++ 6.0</p><p> 5. 運(yùn)行結(jié)果與運(yùn)行情況分析</p><p><b> 5.1運(yùn)行結(jié)果</b></p><p><b> 第一次運(yùn)行結(jié)果為:<
29、;/b></p><p><b> 第二次運(yùn)行結(jié)果為:</b></p><p> 6. 自我評(píng)價(jià)與總結(jié)</p><p> 此次試驗(yàn)是完全在小組合作下完成的,首先在分析問(wèn)題并把問(wèn)題轉(zhuǎn)化為編程問(wèn)題,對(duì)進(jìn)程同步理解的比較透徹;其次我用了個(gè)隨機(jī)函數(shù)來(lái)調(diào)用相應(yīng)的進(jìn)程函數(shù),這對(duì)進(jìn)程間的同步和等待狀態(tài)有很好的說(shuō)明和十分的全面;再次我們?cè)O(shè)了六個(gè)bo
30、ol型的變量來(lái)表示各進(jìn)程時(shí)候處于等待狀態(tài),還設(shè)置了相應(yīng)的整型變量來(lái)解決等待進(jìn)程在適當(dāng)?shù)臈l件下自動(dòng)調(diào)用的先后問(wèn)題。</p><p> 任有不足之處,由于各進(jìn)程調(diào)用是隨機(jī)的,在某個(gè)處于等待狀態(tài)時(shí),可以還能被調(diào)用,事實(shí)上這不是很合理。因?yàn)樘幱诘却隣顟B(tài)的進(jìn)程就不可能在被分配調(diào)用。再有就是程序有些代碼部分有重的,可以把這些重復(fù)執(zhí)行的代碼寫成函數(shù),需要用時(shí)直接調(diào)用代碼函數(shù)。</p><p> 這次
31、自己的收獲還是不小,首先使我們提高了分析問(wèn)題,并根據(jù)需求轉(zhuǎn)化成相應(yīng)的程序結(jié)構(gòu)的能力;其次也豐富了自己編寫程序,調(diào)試程序的經(jīng)驗(yàn),這使得我編程時(shí)可能出現(xiàn)的錯(cuò)誤的認(rèn)識(shí),并如何去避免產(chǎn)生了新的認(rèn)識(shí)。</p><p> 對(duì)于此題我覺(jué)得除了可以用隨機(jī)函數(shù)來(lái)產(chǎn)生隨機(jī)數(shù)來(lái)調(diào)用相應(yīng)的進(jìn)程函數(shù),也可以用人輸入的方式來(lái)選擇調(diào)用相應(yīng)的進(jìn)程函數(shù),這樣可以會(huì)麻煩些,不過(guò)對(duì)進(jìn)程同步的模擬可能會(huì)更加透徹。</p><p&g
32、t; 總的來(lái)說(shuō)這次試驗(yàn)比較成功,加深我了進(jìn)程的理解,同時(shí)也提高了自己的編程的能力。編程是個(gè)長(zhǎng)久的過(guò)程,平時(shí)要多去動(dòng)手實(shí)踐,去提高自己分析問(wèn)題、發(fā)現(xiàn)問(wèn)題、解決問(wèn)題的能力。</p><p><b> 7. 參考資料</b></p><p> [1]宗大華,宗濤,陳吉人著 操作系統(tǒng) 北京:人民郵電出版社,2009</p><p> [2]
33、李愛(ài)華,程磊著 面相對(duì)象程序設(shè)計(jì)(C++語(yǔ)言) 北京: 清華大學(xué)出版社,2010</p><p> [3]宋曉宇 , windows操作系統(tǒng)核心編程實(shí)驗(yàn)教程 中國(guó)鐵道出版社</p><p> [4]張麗芬 劉利雄 王金玉編著 操作系統(tǒng)實(shí)驗(yàn)教程 清華大學(xué)出版社</p><p><b> 附錄</b></p><p
34、><b> 程序源代碼:</b></p><p> #include<time.h> //用到了time函數(shù),所以要有這個(gè)頭文件</p><p> #include<stdlib.h> //用到了srand函數(shù),所以要有這個(gè)頭文件</p><p> #include<iostream.
35、h> </p><p> int Plate_Size=0; //表示盤子中當(dāng)前有幾個(gè)水果</p><p> int orange=0,apple=0; //表示盤子中orange和apple的個(gè)數(shù)</p><p> bool Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daught
36、er2_lag; //六個(gè)進(jìn)程處于等待時(shí),變量值為true</p><p> void main() //main()函數(shù),實(shí)現(xiàn)其他功能函數(shù)的調(diào)用</p><p> { void Print(); //函數(shù)聲明</p><p> void Father();</p><p> void Mother();</p&g
37、t;<p> void Son1();</p><p> void Son2();</p><p> void Daughter1();</p><p> void Daughter2();</p><p><b> int k;</b></p><p> srand((
38、unsigned)time(NULL));//srand()函數(shù)產(chǎn)生一個(gè)以當(dāng)前時(shí)間開始的隨機(jī)種子 </p><p> for(k=0;k<10;k++)</p><p> { cout<<"第"<<k+1<<"次操作:"<<endl; //printf("第%d次操作:\n&qu
39、ot;,k+1);</p><p> int i=rand()%6; //隨進(jìn)生成6以內(nèi)的整數(shù),即0-5的6個(gè)整數(shù)</p><p> Plate_Size=apple+orange;</p><p> int MonFa_c,Daughter_b,Son_a; //for語(yǔ)句的局部變量,控制進(jìn)程等待的優(yōu)先次序,MonFa_c=2,Mather()執(zhí)行
40、,MonFa_c=1,F(xiàn)ather()執(zhí)行</p><p> switch(i) //0為Father()調(diào)用,1為Mother()調(diào)用,2、3為Son1()、Son2()調(diào),4、5為Daughteri()調(diào)用</p><p> { case 0:</p><p> cout<<"Father調(diào)用."<<
41、endl;</p><p> if(Plate_Size==2)</p><p><b> {</b></p><p> Father_lag=true; //Father()等待</p><p><b> Print();</b></p><p> if(Mot
42、her_lag==false)</p><p> MonFa_c=1; </p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> Fathe
43、r();</b></p><p> if((Daughter1_lag==true)&&(Daughter2_lag==true))</p><p><b> {</b></p><p> if(Daughter_b==1)</p><p><b> {</b>&
44、lt;/p><p> Daughter1_lag=false;//Daughter1等待取消</p><p> Daughter1(); //處于等待的Daughter1自動(dòng)調(diào)用</p><p> Daughter_b=2; //優(yōu)先級(jí)讓給Daughter2</p><p><b> }</b></p>
45、;<p><b> else </b></p><p><b> {</b></p><p> Daughter2_lag=false;//Daughter2等待取消</p><p> Daughter2(); //處于等待的Daughter2()自動(dòng)調(diào)用</p><p>
46、 Daughter_b=1; //優(yōu)先級(jí)讓給Daughter1</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>
47、<p> if(Daughter1_lag==true)</p><p><b> {</b></p><p> Daughter1_lag=false;//Daughter1等待取消</p><p> Daughter1(); //處于等待的Daughter1()自動(dòng)調(diào)用</p><p> Dau
48、ghter_b=0; //沒(méi)有等待的Dauther進(jìn)程</p><p><b> }</b></p><p> else if(Daughter2_lag==true)</p><p><b> {</b></p><p> Daughter2_lag=false;//Daughter2等待
49、取消</p><p> Daughter2(); //處于等待的Daughter2()自動(dòng)調(diào)用</p><p> Daughter_b=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }<
50、/b></p><p><b> break;</b></p><p><b> case 1:</b></p><p> cout<<"Mother調(diào)用."<<endl;</p><p> if(Plate_Size==2)</p&g
51、t;<p><b> {</b></p><p> Mother_lag=true; //Mother()等待</p><p><b> Print();</b></p><p> if(Father_lag==false)</p><p> MonFa_c=2; <
52、/p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> Mother();</b></p><p> if((Son1_lag==true
53、)&&(Son2_lag==true)) //Son1和Son2都等待</p><p><b> {</b></p><p> if(Son_a==1) //Son1執(zhí)行</p><p><b> {</b></p><p> Son1_lag=false;//Son1
54、等待取消</p><p> Son1(); //處于等待的Son1()自動(dòng)調(diào)用</p><p> Son_a=2; //優(yōu)先級(jí)讓給Son2</p><p><b> }</b></p><p><b> else </b></p><p><b>
55、 {</b></p><p> Son2_lag=false;//Son2等待取消</p><p> Son2(); //處于等待的Son2()自動(dòng)調(diào)用</p><p> Son_a=1; //優(yōu)先級(jí)讓給Son1</p><p><b> }</b></p><p>&l
56、t;b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> if(Son1_lag==true)</p><p><b> {</b></p><p> Son
57、1_lag=false; //Son1等待取消</p><p> Son1(); //處于等待的Son1()自動(dòng)調(diào)用</p><p><b> Son_a=0;</b></p><p><b> }</b></p><p> else if(Son2_lag==true)</
58、p><p><b> {</b></p><p> Son2_lag=false; //Son2等待取消</p><p> Son2(); //處于等待的Son2()自動(dòng)調(diào)用</p><p><b> Son_a=0;</b></p><p><b>
59、; }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> case 2: </b></p><p>
60、 cout<<"Son1調(diào)用."<<endl;</p><p> if(orange==0)</p><p><b> {</b></p><p> Son1_lag=true; //Son1處于等待</p><p><b> Print();</
61、b></p><p> if(Son2_lag==false)</p><p> Son_a=1; //用于判斷Son1和Son2等待的先后性</p><p><b> }</b></p><p><b> else</b></p><p><b
62、> {</b></p><p><b> Son1();</b></p><p> if((Father_lag==true)&&(Mother_lag==true))</p><p><b> {</b></p><p> if(MonFa_c==1)
63、 //Father和Mother同時(shí)處于等待,但Father先等待,因此先調(diào)用</p><p><b> {</b></p><p> Father_lag=false;</p><p><b> Father();</b></p><p> MonFa_c=2;</p>
64、<p><b> }</b></p><p> else //Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)用</p><p><b> {</b></p><p> Mother_lag=false;</p><p><b> Mother()
65、;</b></p><p> MonFa_c=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>&
66、lt;/p><p> if(Father_lag==true) //只有Father處于等待,調(diào)用</p><p><b> {</b></p><p> Father_lag=false;</p><p><b> Father();</b></p><p> Mo
67、nFa_c=0;</p><p><b> }</b></p><p> else if(Mother_lag==true)//只有Mother處于等待,調(diào)用</p><p><b> {</b></p><p> Mother_lag=false;</p><p>
68、<b> Mother();</b></p><p> MonFa_c=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b&g
69、t; break;</b></p><p><b> case 3:</b></p><p> cout<<"Son2調(diào)用."<<endl;</p><p> if(orange==0)</p><p><b> {</b></
70、p><p> Son2_lag=true; //Son2處于等待</p><p><b> Print();</b></p><p> if(Son1_lag==false)</p><p><b> Son_a=2;</b></p><p><b> }&
71、lt;/b></p><p><b> else</b></p><p><b> {</b></p><p><b> Son2();</b></p><p> if((Father_lag==true)&&(Mother_lag==true))
72、</p><p><b> {</b></p><p> if(MonFa_c==1)//Father和Mother同時(shí)處于等待,但Father先等待,因此先調(diào)用</p><p><b> {</b></p><p> Father_lag=false;</p><p&g
73、t;<b> Father();</b></p><p> MonFa_c=2;</p><p><b> }</b></p><p> else //Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)用</p><p><b> {</b>
74、</p><p> Mother_lag=false;</p><p><b> Mother();</b></p><p> MonFa_c=1;</p><p><b> }</b></p><p><b> }</b></p>
75、<p><b> else</b></p><p><b> {</b></p><p> if(Father_lag==true) //只有Father處于等待,調(diào)用Father</p><p><b> {</b></p><p> Father
76、_lag=false;</p><p><b> Father();</b></p><p> MonFa_c=0;</p><p><b> }</b></p><p> else if(Mother_lag==true) //只有Mother處于等待,調(diào)用Mother</p>
77、;<p><b> {</b></p><p> Mother_lag=false;</p><p><b> Mother();</b></p><p> MonFa_c=0;</p><p><b> }</b></p><p&g
78、t;<b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> case 4:</b></p><p> cout<<"Daughter1調(diào)用.&qu
79、ot;<<endl;</p><p> if(apple==0)</p><p><b> {</b></p><p> Daughter1_lag=true; //Daughter1等待</p><p><b> Print();</b></p><p&g
80、t; if(Daughter2_lag==false)</p><p> Daughter_b=1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> D
81、aughter1(); </p><p> if((Father_lag==true)&&(Mother_lag==true))</p><p><b> {</b></p><p> if(MonFa_c==1) //Father和Mother同時(shí)處于等待,但Father先等待,因此先調(diào)用</p><
82、p> { </p><p> Father_lag=false;</p><p><b> Father();</b></p><p> MonFa_c=2;</p><p><b> }</b></p><p> else /
83、/Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)用</p><p><b> {</b></p><p> Mother_lag=false;</p><p><b> Mother();</b></p><p> MonFa_c=1;</p><
84、p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(Father_lag==true) //只有Father處于等待,調(diào)
85、用</p><p><b> {</b></p><p> Father_lag=false;</p><p><b> Father();</b></p><p> MonFa_c=0;</p><p><b> }</b></p>
86、;<p> else if(Mother_lag==true) //只有Mother處于等待,調(diào)用</p><p><b> {</b></p><p> Mother_lag=false;</p><p><b> Mother();</b></p><p> MonFa
87、_c=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> case 5
88、:</b></p><p> cout<<"Daughter2調(diào)用."<<endl;</p><p> if(apple==0)</p><p><b> {</b></p><p> Daughter2_lag=true;//Daughter2等待&l
89、t;/p><p> Print();</p><p> if(Daughter1_lag==false)</p><p> Daughter_b=2;</p><p><b> }</b></p><p><b> else</b></p>&l
90、t;p><b> {</b></p><p> Daughter2();</p><p> if((Father_lag==true)&&(Mother_lag==true))</p><p><b> {</b></p><p> if(MonFa_c==1) /
91、/Father和Mother同時(shí)處于等待,但Father先等待,因此先調(diào)用</p><p><b> {</b></p><p> Father_lag=false;</p><p><b> Father();</b></p><p> MonFa_c=2;</p><
92、p><b> }</b></p><p> else //Father和Mother同時(shí)處于等待,但Mother先等待,因此先調(diào)用</p><p><b> { </b></p><p> Mother_lag=false;</p><p><b> Mother()
93、;</b></p><p> MonFa_c=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b>
94、</p><p> if(Father_lag==true) //只有Father處于等待,調(diào)用</p><p><b> { </b></p><p> Father_lag=false;</p><p><b> Father();</b></p><p>
95、 MonFa_c=0;</p><p><b> }</b></p><p> else if(Mother_lag==true) //只有Mother處于等待,調(diào)用</p><p><b> { </b></p><p> Mother_lag=false;</p>
96、<p><b> Mother();</b></p><p> MonFa_c=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&g
97、t;<b> break;</b></p><p> } //switch語(yǔ)句結(jié)束</p><p> } //for語(yǔ)句結(jié)束</p><p> } //main函數(shù)結(jié)束</p><p> void Print() //Print函數(shù)(打印盤子剩余水果及各進(jìn)程等待狀態(tài))</p><
98、;p><b> {</b></p><p> cout<<"現(xiàn)在盤子里有"<<apple<<"個(gè)蘋果,"<<orange<<"個(gè)橘子,"<<"共有"<<apple+orange<<"個(gè)水果.&quo
99、t;<<endl;</p><p> if(Father_lag==true)</p><p> cout<<"Father進(jìn)程處于等待狀態(tài),";</p><p> if(Mother_lag==true)</p><p> cout<<"Mother進(jìn)程處于等待狀態(tài),
100、";</p><p> if(Son1_lag==true)</p><p> cout<<"Son1進(jìn)程處于等待狀態(tài),";</p><p> if(Son2_lag==true) </p><p> cout<<"Son2進(jìn)程處于等待狀態(tài), ";</p&
101、gt;<p> if(Daughter1_lag==true)</p><p> cout<<"Daughter1進(jìn)程處于等待狀態(tài),";</p><p> if(Daughter2_lag==true)</p><p> cout<<"Daughter2進(jìn)程處于等待狀態(tài),";<
102、;/p><p> if(((Father_lag==false)&&(Mother_lag==false)&&(Son1_lag==false)&&(Son2_lag==false)&&(Daughter1_lag==false)&&(Daughter2_lag==false))!=true)</p><p>
103、 cout<<endl;</p><p><b> }</b></p><p> void Father() //Father進(jìn)程</p><p> {apple++;</p><p><b> Print();</b></p><p><b&
104、gt; }</b></p><p> void Mother() //Mother進(jìn)程</p><p><b> {</b></p><p><b> orange++;</b></p><p><b> Print();</b></p>&
105、lt;p><b> }</b></p><p> void Son1() //Son1進(jìn)程</p><p> {orange--;</p><p><b> Print();</b></p><p><b> }</b></p><p&g
106、t; void Son2() //Son2進(jìn)程</p><p> {orange--;</p><p><b> Print();</b></p><p><b> }</b></p><p> void Daughter1() //Daughter1進(jìn)程</p>&l
107、t;p> {apple--;</p><p><b> Print();</b></p><p><b> }</b></p><p> void Daughter2() //Daughter2進(jìn)程</p><p><b> {</b></p>
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--蘋果問(wèn)題
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—多進(jìn)程同步橘子蘋果問(wèn)題
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--讀者寫者問(wèn)題
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告-讀者寫著問(wèn)題
- 操作系統(tǒng)課程設(shè)計(jì)---吃水果問(wèn)題
- 操作系統(tǒng)課程設(shè)計(jì)-讀者寫者問(wèn)題
- 操作系統(tǒng)課程設(shè)計(jì)題目
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)論文
- 操作系統(tǒng)課程設(shè)計(jì) (4)
- 操作系統(tǒng)課程設(shè)計(jì)1
評(píng)論
0/150
提交評(píng)論