操作系統(tǒng)實驗報告經典的生產者—消費者問題.doc
《操作系統(tǒng)實驗報告經典的生產者—消費者問題.doc》由會員分享,可在線閱讀,更多相關《操作系統(tǒng)實驗報告經典的生產者—消費者問題.doc(8頁珍藏版)》請在匯文網上搜索。
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) 生產者 NYYN開 始生產產品Wait (empty)empty0Wait (mutex)Mutex=1存入緩沖區(qū)empty = empty- 1Signal (mutex)S
4、ignal (full)緩沖區(qū)內已滿,已無可用緩沖區(qū)緩沖區(qū)正被其他進程占用結 束(2) 消費者NYYN開 始Wait (full) 消費請求full0Wait (mutex)Mutex=1消 費full = full - 1Signal (mutex)Signal (empty)緩沖區(qū)內產品已空,不能進行消費緩沖區(qū)正被其他進程占用結 束2、主要程序代碼/初始化變量 private void Form1_Load(object sender, EventArgs e) mutex = 1; /互斥信號量 full = 0; /緩沖池中滿緩沖區(qū)的數(shù)量 empty = 5;/緩沖池中空緩沖區(qū)的數(shù)量
5、count1 = 0;/生產的產品數(shù)目 i = 0; lb_mutex.Text = 1; lb_full.Text = 0; lb_empty.Text = 5; /消費者從緩沖區(qū)中消費一個產品 private void consumer_Click(object sender, EventArgs e) if (full 0) /消費者已進入互斥臨界區(qū) if (mutex = 1) /申請進入臨界區(qū) mutex = 0; /消費者已進入互斥臨界區(qū) lb_mutex.Text = 0; timer_consumer.Enabled = true;/啟動消費者消費緩沖區(qū)產品 else Mess
6、ageBox.Show(緩沖區(qū)被占用,請等待。, 信息提MessageBoxButtons.OK); else MessageBox.Show(緩沖區(qū)為空,不能消費!, 信息提示, MessageBoxButtons.OK); /生產者向緩沖區(qū)中存入一個產品 private void producer_Click(object sender, EventArgs e) count1 = count1 + 1; /生產一個產品 if (empty 0) /有緩沖區(qū)可放產品 if (mutex = 1) /申請進入臨界區(qū) mutex = 0; /生產者已進入臨界區(qū) lb_mutex.Text =
7、0;timer1.Start(); /啟動生產者將產品放入緩沖區(qū) else /不能進入臨界區(qū) count1 = count1 - 1; MessageBox.Show(緩沖區(qū)被占用,請等待。, 信息提示, MessageBoxButtons.OK); else MessageBox.Show(緩沖區(qū)已滿!, 信息提示, MessageBoxButtons.OK); /無緩沖區(qū)可放產品 count1 = count1 - 1; /生產者 private void timer1_Tick_1(object sender, EventArgs e) if (bool1) switch (count1
8、) case 1: pictureBox1.Visible = true; break; case 2: pictureBox2.Visible = true; break; case 3: pictureBox3.Visible = true; break; case 4: pictureBox4.Visible = true; break; case 5: pictureBox5.Visible = true; break; lb_show.Text = 生產者進程占用緩沖區(qū),請等待。; bool1 = false; else switch (count1) case 1: picture
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 操作系統(tǒng)實驗報告 經典的生產者消費者問題 操作系統(tǒng) 實驗 報告 經典 生產者 消費者 問題