操作系統(tǒng)實驗報告經典地生產者—消費者問題_第1頁
操作系統(tǒng)實驗報告經典地生產者—消費者問題_第2頁
操作系統(tǒng)實驗報告經典地生產者—消費者問題_第3頁
操作系統(tǒng)實驗報告經典地生產者—消費者問題_第4頁
操作系統(tǒng)實驗報告經典地生產者—消費者問題_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實驗二經典的生產者消費者問題一、目的實現(xiàn)對經典的生產者消費者問題的模擬,以便更好的理解經典進程同步問題。二、實驗內容及要求編制生產者消費者算法,模擬一個生產者、一個消費者,共享一個緩沖池的情形。1、實現(xiàn)對經典的生產者消費者問題的模擬,以便更好的理解此經典進程同步問題。生產者消費者問題是典型的PV操作問題,假設系統(tǒng)中有一個比較大的緩沖池,生產者的任務是只要緩沖池未滿就可以將生產出的產品放入其中,而消費者的任務是只要緩沖池未空就可以從緩沖池中拿走產品。緩沖池被占用時,任何進程都不能訪問。2、每一個生產者都要把自己生產的產品放入緩沖池,每個消費者從緩沖池中取走產品消費。在這種情況下,生產者消費者進程

2、同步,因為只有通過互通消息才知道是否能存入產品或者取走產品。他們之間也存在互斥,即生產者消費者必須互斥訪問緩沖池,即不能有兩個以上的進程同時進行。三、生產者和消費者原理分析在同一個進程地址空間內執(zhí)行兩個線程。生產者線程生產物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當生產者線程生產物品時,如果沒有空緩沖區(qū)可用,那么生產者線程必須等待消費者線程釋放一個空緩沖區(qū)。當消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻擋,直到新的物品被生產出來。四、生產者與消費者功能描述:生產者功能描述:在同一個進程地址空間內執(zhí)行兩個線程。生產者線程

3、生產物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。當生產者線程生產物品時,如果沒有空緩沖區(qū)可用,那么生產者線程必須等待消費者線程釋放出一個空緩沖區(qū)。消費者功能描述:消費者線程從緩沖區(qū)獲得物品,然后釋放緩沖區(qū),當消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻塞,直到新的物品被生產出來。五、實驗環(huán)境操作系統(tǒng)環(huán)境:Windows系統(tǒng)。編程語言:C#。1六、生產者與消費者的思路和設計1、程序流程圖(1)生產者開始生產產品Wait(empty)Yempty0N緩沖區(qū)內已滿,已無可用緩沖區(qū)Wait(mutex)NMutex=1Y緩沖區(qū)正被其他進存入緩沖區(qū)程占用empty=empty

4、-1Signal(mutex)Signal(full)結束2(2)消費者開始Wait(full)消費請求Yfull0N緩沖區(qū)內產品已空,不能進行消費Wait(mutex)NMutex=1Y緩沖區(qū)正被其他進消費程占用full=full-1Signal(mutex)Signal(empty)結束32、主要程序代碼/初始化變量privatevoidForm1_Load(objectsender,EventArgse)mutex=1;/互斥信號量full=0;/緩沖池中滿緩沖區(qū)的數量empty=5;/緩沖池中空緩沖區(qū)的數量count1=0;/生產的產品數目i=0;lb_mutex.Text=1;lb_

5、full.Text=0;lb_empty.Text=5;/消費者從緩沖區(qū)中消費一個產品privatevoidconsumer_Click(objectsender,EventArgse)if(full0)/消費者已進入互斥臨界區(qū)if(mutex=1)/申請進入臨界區(qū)mutex=0;/消費者已進入互斥臨界區(qū)lb_mutex.Text=0;timer_consumer.Enabled=true;/啟動消費者消費緩沖區(qū)產品elseMessageBox.Show(緩沖區(qū)被占用,請等待。,信息提MessageBoxButtons.OK);elseMessageBox.Show(緩沖區(qū)為空,不能消費!,信

6、息提示,MessageBoxButtons.OK);/生產者向緩沖區(qū)中存入一個產品privatevoidproducer_Click(objectsender,EventArgse)count1=count1+1;/生產一個產品if(empty0)/有緩沖區(qū)可放產品if(mutex=1)/申請進入臨界區(qū)mutex=0;/生產者已進入臨界區(qū)lb_mutex.Text=0;timer1.Start();/啟動生產者將產品放入緩沖區(qū)4else/不能進入臨界區(qū)count1=count1-1;MessageBox.Show(緩沖區(qū)被占用,請等待。,信息提示,MessageBoxButtons.OK);e

7、lseMessageBox.Show(緩沖區(qū)已滿!,信息提示,MessageBoxButtons.OK);/無緩沖區(qū)可放產品count1=count1-1;/生產者privatevoidtimer1_Tick_1(objectsender,EventArgse)if(bool1)switch(count1)case1:pictureBox1.Visible=true;break;case2:pictureBox2.Visible=true;break;case3:pictureBox3.Visible=true;break;case4:pictureBox4.Visible=true;brea

8、k;case5:pictureBox5.Visible=true;break;lb_show.Text=生產者進程占用緩沖區(qū),請等待。;bool1=false;elseswitch(count1)case1:pictureBox1.Visible=false;break;case2:pictureBox2.Visible=false;break;case3:pictureBox3.Visible=false;break;case4:pictureBox4.Visible=false;break;case5:pictureBox5.Visible=false;break;lb_show.Text

9、=生產者進程占用緩沖區(qū),請等待。;bool1=true;i=i+1;if(i=5)/循環(huán)緩沖區(qū),首尾相接5i=0;timer1.Enabled=false;mutex=1;lb_mutex.Text=1;switch(count1)case1:pictureBox1.Visible=true;break;case2:pictureBox2.Visible=true;break;case3:pictureBox3.Visible=true;break;case4:pictureBox4.Visible=true;break;case5:pictureBox5.Visible=true;break

10、;full=full+1;lb_full.Text=full.ToString();empty=empty-1;lb_empty.Text=empty.ToString();lb_show.Text=生產結束!;/消費者privatevoidtimer_consumer_Tick(objectsender,EventArgse)if(bool1)switch(count1)case1:pictureBox1.Visible=true;break;case2:pictureBox2.Visible=true;break;case3:pictureBox3.Visible=true;break;c

11、ase4:pictureBox4.Visible=true;break;case5:pictureBox5.Visible=true;break;lb_show.Text=消費者進程占用緩沖區(qū),請等待。;bool1=false;elseswitch(count1)case1:pictureBox1.Visible=false;break;case2:pictureBox2.Visible=false;break;case3:pictureBox3.Visible=false;break;case4:pictureBox4.Visible=false;break;case5:pictureBox

12、5.Visible=false;break;lb_show.Text=消費者進程占用緩沖區(qū),請等待。;bool1=true;i=i+1;if(i=5)6i=0;timer_consumer.Enabled=false;mutex=1;lb_mutex.Text=1;switch(count1)case1:pictureBox1.Visible=false;break;case2:pictureBox2.Visible=false;break;case3:pictureBox3.Visible=false;break;case4:pictureBox4.Visible=false;break;c

13、ase5:pictureBox5.Visible=false;break;count1=count1-1;full=full-1;lb_full.Text=full.ToString();empty=empty+1;lb_empty.Text=empty.ToString();lb_show.Text=消費結束!;3、運行界面和運行結果一般情況下,點一次生產者按紐,mutex由1變?yōu)?,緩沖區(qū)呈現(xiàn)閃爍狀態(tài)(表示正在存儲),此時不可以再進行緩沖區(qū)操作,否則將顯示“生產者進程正在占用緩沖區(qū),請等待”。閃爍約1.5秒后,mutex由0變?yōu)?,閃爍停止,表示存儲過程結束;點一次消費者按紐,mutex由

14、1變?yōu)?,緩沖區(qū)呈現(xiàn)閃爍狀態(tài)(表示正在消費),此時不可以再進行緩沖區(qū)操作,否則將顯示“消費者進程正在占用緩沖區(qū),請等待”。閃爍約1.5秒后,mutex由0變?yōu)?,閃爍停止,表示消費過程結束。7緩沖池滿后,若再點生產者按紐,會給出信息提示:“緩沖區(qū)已滿!”。緩沖池空后,若再點消費者按紐,也會給出信息提示:“緩沖區(qū)為空,不能消費!”。在存儲狀態(tài)或消費狀態(tài)(閃爍狀態(tài)),無論是點生產者按紐還是消費者按紐都會給出“緩沖區(qū)被占用,請等待?!毙畔⑻崾?。七、心得體會本次實驗是關于生產者與消費者之間互斥和同步的問題。問題的是指是P、V操作,實驗設一個共享緩沖區(qū),生產者和消費者互斥的使用,當一個線程使用緩沖區(qū)的時候,另一個讓其等待直到前

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論