已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實驗二 經(jīng)典的生產(chǎn)者消費者問題一、目的實現(xiàn)對經(jīng)典的生產(chǎn)者消費者問題的模擬,以便更好的理解經(jīng)典進(jìn)程同步問題。二、實驗內(nèi)容及要求編制生產(chǎn)者消費者算法,模擬一個生產(chǎn)者、一個消費者,共享一個緩沖池的情形。1、實現(xiàn)對經(jīng)典的生產(chǎn)者消費者問題的模擬,以便更好的理解此經(jīng)典進(jìn)程同步問題。生產(chǎn)者消費者問題是典型的PV操作問題,假設(shè)系統(tǒng)中有一個比較大的緩沖池,生產(chǎn)者的任務(wù)是只要緩沖池未滿就可以將生產(chǎn)出的產(chǎn)品放入其中,而消費者的任務(wù)是只要緩沖池未空就可以從緩沖池中拿走產(chǎn)品。緩沖池被占用時,任何進(jìn)程都不能訪問。2、每一個生產(chǎn)者都要把自己生產(chǎn)的產(chǎn)品放入緩沖池,每個消費者從緩沖池中取走產(chǎn)品消費。在這種情況下,生產(chǎn)者消費者進(jìn)程同步,因為只有通過互通消息才知道是否能存入產(chǎn)品或者取走產(chǎn)品。他們之間也存在互斥,即生產(chǎn)者消費者必須互斥訪問緩沖池,即不能有兩個以上的進(jìn)程同時進(jìn)行。三、生產(chǎn)者和消費者原理分析在同一個進(jìn)程地址空間內(nèi)執(zhí)行兩個線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當(dāng)生產(chǎn)者線程生產(chǎn)物品時,如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費者線程釋放一個空緩沖區(qū)。當(dāng)消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻擋,直到新的物品被生產(chǎn)出來。四、生產(chǎn)者與消費者功能描述:生產(chǎn)者功能描述:在同一個進(jìn)程地址空間內(nèi)執(zhí)行兩個線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。當(dāng)生產(chǎn)者線程生產(chǎn)物品時,如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū)。消費者功能描述:消費者線程從緩沖區(qū)獲得物品,然后釋放緩沖區(qū),當(dāng)消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻塞,直到新的物品被生產(chǎn)出來。五、實驗環(huán)境操作系統(tǒng)環(huán)境:Windows系統(tǒng)。編程語言:C#。六、生產(chǎn)者與消費者的思路和設(shè)計1、程序流程圖(1) 生產(chǎn)者 NYYN開 始生產(chǎn)產(chǎn)品Wait (empty)empty0Wait (mutex)Mutex=1存入緩沖區(qū)empty = empty- 1Signal (mutex)Signal (full)緩沖區(qū)內(nèi)已滿,已無可用緩沖區(qū)緩沖區(qū)正被其他進(jìn)程占用結(jié) 束(2) 消費者NYYN開 始Wait (full) 消費請求full0Wait (mutex)Mutex=1消 費full = full - 1Signal (mutex)Signal (empty)緩沖區(qū)內(nèi)產(chǎn)品已空,不能進(jìn)行消費緩沖區(qū)正被其他進(jìn)程占用結(jié) 束2、主要程序代碼/初始化變量 private void Form1_Load(object sender, EventArgs e) mutex = 1; /互斥信號量 full = 0; /緩沖池中滿緩沖區(qū)的數(shù)量 empty = 5;/緩沖池中空緩沖區(qū)的數(shù)量 count1 = 0;/生產(chǎn)的產(chǎn)品數(shù)目 i = 0; lb_mutex.Text = 1; lb_full.Text = 0; lb_empty.Text = 5; /消費者從緩沖區(qū)中消費一個產(chǎn)品 private void consumer_Click(object sender, EventArgs e) if (full 0) /消費者已進(jìn)入互斥臨界區(qū) if (mutex = 1) /申請進(jìn)入臨界區(qū) mutex = 0; /消費者已進(jìn)入互斥臨界區(qū) lb_mutex.Text = 0; timer_consumer.Enabled = true;/啟動消費者消費緩沖區(qū)產(chǎn)品 else MessageBox.Show(緩沖區(qū)被占用,請等待。, 信息提MessageBoxButtons.OK); else MessageBox.Show(緩沖區(qū)為空,不能消費!, 信息提示, MessageBoxButtons.OK); /生產(chǎn)者向緩沖區(qū)中存入一個產(chǎn)品 private void producer_Click(object sender, EventArgs e) count1 = count1 + 1; /生產(chǎn)一個產(chǎn)品 if (empty 0) /有緩沖區(qū)可放產(chǎn)品 if (mutex = 1) /申請進(jìn)入臨界區(qū) mutex = 0; /生產(chǎn)者已進(jìn)入臨界區(qū) lb_mutex.Text = 0;timer1.Start(); /啟動生產(chǎn)者將產(chǎn)品放入緩沖區(qū) else /不能進(jìn)入臨界區(qū) count1 = count1 - 1; MessageBox.Show(緩沖區(qū)被占用,請等待。, 信息提示, MessageBoxButtons.OK); else MessageBox.Show(緩沖區(qū)已滿!, 信息提示, MessageBoxButtons.OK); /無緩沖區(qū)可放產(chǎn)品 count1 = count1 - 1; /生產(chǎn)者 private void timer1_Tick_1(object sender, EventArgs e) if (bool1) switch (count1) 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 = 生產(chǎn)者進(jìn)程占用緩沖區(qū),請等待。; bool1 = false; else switch (count1) case 1: pictureBox1.Visible = false; break; case 2: pictureBox2.Visible = false; break; case 3: pictureBox3.Visible = false; break; case 4: pictureBox4.Visible = false; break; case 5: pictureBox5.Visible = false; break; lb_show.Text = 生產(chǎn)者進(jìn)程占用緩沖區(qū),請等待。; bool1 = true; i = i + 1; if (i = 5) /循環(huán)緩沖區(qū),首尾相接 i = 0; timer1.Enabled = false; mutex = 1; lb_mutex.Text = 1; switch (count1) 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; full = full + 1; lb_full.Text = full.ToString(); empty = empty - 1; lb_empty.Text = empty.ToString(); lb_show.Text = 生產(chǎn)結(jié)束!; /消費者 private void timer_consumer_Tick(object sender, EventArgs e) if(bool1) switch(count1) 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 = 消費者進(jìn)程占用緩沖區(qū),請等待。; bool1 =false; else switch(count1) case 1: pictureBox1.Visible = false; break; case 2: pictureBox2.Visible = false; break; case 3: pictureBox3.Visible = false; break; case 4: pictureBox4.Visible = false; break; case 5: pictureBox5.Visible = false; break; lb_show.Text= 消費者進(jìn)程占用緩沖區(qū),請等待。; bool1= true; i = i + 1;if(i=5) i = 0; timer_consumer.Enabled = false; mutex = 1;lb_mutex.Text= 1; switch(count1) case 1: pictureBox1.Visible = false; break; case 2: pictureBox2.Visible = false; break; case 3: pictureBox3.Visible = false; break; case 4: pictureBox4.Visible = false; break; case 5: 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=消費結(jié)束!; 3、運行界面和運行結(jié)果一般情況下,點一次生產(chǎn)者按紐,mutex由1變?yōu)?,緩沖區(qū)呈現(xiàn)閃爍狀態(tài)(表示正在存儲),此時不可以再進(jìn)行緩沖區(qū)操作,否則將顯示“生產(chǎn)者進(jìn)程正在占用緩沖區(qū),請等待”。閃爍約1.5秒后,mutex由0變?yōu)?,閃爍停止,表示存儲過程結(jié)束;點一次消費者按紐,mutex由1變?yōu)?,緩沖區(qū)呈現(xiàn)閃爍狀態(tài)(表示正在消費),此時不可以再進(jìn)行緩沖區(qū)操作,否則將顯示“消費者進(jìn)程正在占用緩沖區(qū),請等待”。閃爍約1.5秒后,mutex由0變?yōu)?,閃爍停止,表示消費過程結(jié)束。緩沖池滿后,若再點生產(chǎn)者按紐,會給出信息提示:“緩沖區(qū)已滿!”。緩沖池空后,若再點消費者按紐,也會給出信息提示:“緩沖區(qū)為空,不能消費!”。在存儲狀態(tài)或消費狀態(tài)(閃爍狀態(tài)),無論是點生產(chǎn)者按紐還是消費者按紐都會給出“緩沖區(qū)被占用,請等待?!毙畔⑻崾尽F?、心得體會本次實驗是關(guān)于生產(chǎn)者與消費者之間互斥和同步的問題。問題的是指是P、V操作,實驗設(shè)一個共享緩沖區(qū),生產(chǎn)者和消費者互斥的使用,當(dāng)一
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 烤漆作業(yè)標(biāo)準(zhǔn)指南
- 2026年泉州輕工職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及參考答案詳解一套
- 《正常人體功能》課件-體溫
- 勞務(wù)派遣人員工資支付擔(dān)保協(xié)議
- 中藥材行業(yè)中藥提取技術(shù)員崗位招聘考試試卷及答案
- 2026年小學(xué)生心理健康教育工作計劃
- 2025年固體分散載體材料項目合作計劃書
- 2025年放射性污染防治合作協(xié)議書
- 術(shù)后虛弱的飲食調(diào)養(yǎng)
- 遼寧省2025秋九年級英語全冊Unit3Couldyoupleasetellmewheretherestroomsare課時3SectionA(GrammarFocus-4c)課件新版人教新目標(biāo)版
- 酒店行業(yè)的信息安全培訓(xùn)方法
- 塑料制品行業(yè)財務(wù)工作年度績效報告
- 皮膚科護(hù)理中的振動按摩在皮膚病管理中的應(yīng)用
- 20以內(nèi)進(jìn)位加法100題(精心整理6套-可打印A4)
- 腸內(nèi)營養(yǎng)考評標(biāo)準(zhǔn)終
- 2023屆高考專題復(fù)習(xí):小說專題訓(xùn)練群體形象與個體形象(含答案)
- 項目全周期現(xiàn)金流管理培訓(xùn)
- 生物化學(xué)實驗智慧樹知到答案章節(jié)測試2023年浙江大學(xué)
- 等腰三角形復(fù)習(xí)課教案
- GB/T 39741.1-2021滑動軸承公差第1部分:配合
- GB/T 19228.3-2012不銹鋼卡壓式管件組件第3部分:O形橡膠密封圈
評論
0/150
提交評論