多線程--生產(chǎn)者消費者問題_第1頁
多線程--生產(chǎn)者消費者問題_第2頁
多線程--生產(chǎn)者消費者問題_第3頁
多線程--生產(chǎn)者消費者問題_第4頁
多線程--生產(chǎn)者消費者問題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實驗報告*口T專業(yè)網(wǎng)絡(luò)工程班級08102班 學(xué)號01號姓名胡雙雙課程名稱操作系統(tǒng)學(xué)年2010-2011學(xué)期下課程類別專業(yè)必修限選任選實踐口實驗時間2010年11月3日實驗名稱實驗一:生產(chǎn)者與消費者問題實驗?zāi)康暮鸵笕胬斫馍a(chǎn)者與消費者問題模型,掌握解決該問題的算法思想,正確使用同步機(jī)制。實驗軟硬件要求Pentium(R) Dual-Core CPU 1.96G 內(nèi)存WINDOWS XP ProfessionalVisual C+6.0實驗內(nèi)容、方法和步驟(可附頁)問題描述:一組生產(chǎn)者向一組消費者提供商品,共享一個有界緩沖池,生產(chǎn)者向其中放入商品,消費者從中 取得商品。假定這些生產(chǎn)者和消費者互

2、相等效,只要緩沖池未滿,生產(chǎn)者可將商品送入緩沖池;只要緩沖池未空, 消費者可從緩沖池取走一商品。功能要求:根據(jù)進(jìn)程同步機(jī)制,編寫一個解決上述問題的程序,可顯示緩沖池狀態(tài)、放商品、取商品等過程。具體參數(shù):有1個生產(chǎn)者進(jìn)程;有1個消費者進(jìn)程;緩沖區(qū)單元個數(shù)BUFFER_NUM =5;不同的生產(chǎn)進(jìn)程可生產(chǎn)不同的產(chǎn)品,自己可任意定義,在本程序中是直接將相應(yīng)生產(chǎn)者代號放入緩沖區(qū),消 費時將某消費者消費某生產(chǎn)者的信息顯示出來 實驗結(jié)果:見截圖小結(jié)從此次試驗中,學(xué)到了很多關(guān)于編程的知識,以前對于編程的認(rèn)識只停留在一些簡單的算法上,并沒有系統(tǒng)的 進(jìn)行編程訓(xùn)練。此次的試驗是以前從沒接觸過的多線程,中間涉及的同步

3、及互斥問題,在設(shè)計軟件及系統(tǒng)時,都是 極其重要的。多線程實驗對于我們現(xiàn)階段確實有點偏難,不過,在經(jīng)過請教同學(xué)及看參考書,終于自己寫出了一個相對于簡 單一點的生產(chǎn)者消費者的多線程程序。評定成績:批閱教師:年 月 日一、問題概述一組生產(chǎn)者向一組消費者提供消息,它們共享一個有界緩沖池,生產(chǎn)者向其中投放消息,消費者從中取得消息。只要緩沖池未滿,生產(chǎn)者可將消息送入緩沖池;只要緩沖池未空,消費者可從假定這些生產(chǎn)者和消費者互相等效,緩沖池取走一個消息。二、設(shè)計流程圖(1)生產(chǎn)者流程圖:(2)消費者流程圖三、數(shù)據(jù)定義# define BUFFER_NUM 5 / 緩沖區(qū)個數(shù)int mutexBUFFER_NU

4、M=0,0,0,0,0;int bufferBUFFER_NUM=0,0,0,0,0;/ 初始化緩沖區(qū)為空HANDLE g_hMutex; /用于線程間的互斥void show();函數(shù),顯示生產(chǎn)者及消費者過程DWORD WINAPI Producer(LPVOID lpPara);過程,生產(chǎn)者生產(chǎn)產(chǎn)品過程DWORD WINAPI Customer(LPVOID lpPara);/ 過程,消費者消費產(chǎn)品過程四、源程序#include#include# define BUFFER_NUM 5 / 緩沖區(qū)個數(shù)int mutexBUFFER_NUM=0,0,0,0,0; 一int bufferBUF

5、FER_NUM=0,0,0,0,0;/初始化緩沖區(qū)為空HANDLE g_hMutex; /用于線程間的互斥 void show。for(int i=0;iBUFFER_NUM;i+)printf(第d 個緩沖區(qū)為:dn”,i,bufferi);printf(nn);DWORD WINAPI Producer(LPVOID lpPara)while(true)for(int i=0;iBUFFER_NUM;i+)if(bufferi=0)if(mutexi=0)mutexi=1;/加 鎖WaitForSingleObject(g_hMutex,INFINITE);bufferi=1;printf

6、(生產(chǎn)出一個產(chǎn)品,已放入第d個緩沖區(qū)n,i);show();Sleep(1000);ReleaseMutex(g_hMutex);mutexi=0;/解鎖break;if(i=BUFFER_NUM)printf(緩沖區(qū)已滿,請等待/);/緩沖區(qū)已滿,請等待Sleep(1000);DWORD WINAPI Customer(LPVOID lpPara)while(true)for(int j=0;jBUFFER_NUM;j+)if(bufferj=1)if(mutexj=0)mutexj=1;/加 鎖WaitForSingleObject(g_hMutex,INFINITE);bufferj=0

7、;printf(”消費者已消費第d個緩沖區(qū)的產(chǎn)品n”,j);show();Sleep(1000);ReleaseMutex(g_hMutex);mutexj=0;/解鎖break;if(j=BUFFER NUM)printf(-沒有產(chǎn)品可消費,請等待/);/沒有產(chǎn)品可消費,請等待 Sleep(1000);int main(int argc,char* argv)HANDLE handle4;g_hMutex = CreateMutex(NULL,FALSE,NULL);for(int i=0;i2;i+)handlei=CreateThread(NULL,0,Producer,NULL,0,N

8、ULL);for(i=2;i11 11 11 11 11個緩沖區(qū)的產(chǎn)品 0 0 I I I一翳為為為為為一窘區(qū)區(qū)區(qū)區(qū)區(qū)一 &.:.甲,甲中中中 嘉瀉*紗個緩沖區(qū)的產(chǎn)品000II(3)空緩沖區(qū),無產(chǎn)品消費個緩沖區(qū)的產(chǎn)品1&餐為為為為為 齦區(qū)區(qū)區(qū)區(qū)區(qū) . .E!.甲.甲.甲.甲 -匚爰爰蓼備境 SB個緩沖區(qū)的產(chǎn)品3&3Bjl-.甘.甘.甘.甘. 區(qū)區(qū)區(qū)區(qū)區(qū) 密m.m.m.m.m. _|11 11 11 11 11 一匚爰爰爰爰爰 +-aua土au . -0 1A 2 T 4 逍密直廣品可浦落 譚蜀括有產(chǎn)品苛常聶 請鷺4(4)緩沖區(qū)已滿,等待己放入第2個緩沖區(qū)01111匚口 燈=.燈=.燈=.燈=.燈= qj區(qū)區(qū)區(qū)區(qū)區(qū) 占 口 口 口 口 %

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論