實(shí)驗(yàn)二 生產(chǎn)者消費(fèi)者問題_第1頁
實(shí)驗(yàn)二 生產(chǎn)者消費(fèi)者問題_第2頁
實(shí)驗(yàn)二 生產(chǎn)者消費(fèi)者問題_第3頁
實(shí)驗(yàn)二 生產(chǎn)者消費(fèi)者問題_第4頁
實(shí)驗(yàn)二 生產(chǎn)者消費(fèi)者問題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

電子科技大學(xué)信息與軟件學(xué)院實(shí)驗(yàn)報(bào)告(實(shí)驗(yàn))課程名稱計(jì)算機(jī)操作系統(tǒng)學(xué)生姓名康彪學(xué)生學(xué)號電子科技大學(xué)教務(wù)處制表7、實(shí)驗(yàn)及結(jié)果分析:能夠正確模擬生產(chǎn)者和消費(fèi)者模型,對緩沖區(qū)進(jìn)行讀寫操作。生產(chǎn)者消費(fèi)者問題 1生產(chǎn)者2消費(fèi)者4緩沖區(qū)--byMoreldindows(http:)--生產(chǎn)者在緩沖池第。個(gè)緩沖區(qū)中投放數(shù)據(jù)1生產(chǎn)者在緩沖池第1個(gè)緩沖區(qū)中投放數(shù)據(jù)2生產(chǎn)者在緩沖池第2個(gè)緩沖區(qū)中投放數(shù)據(jù)3編號為420的消費(fèi)者從緩沖池中第0個(gè)緩沖區(qū)取出數(shù)據(jù)1生產(chǎn)者在緩沖池第3個(gè)緩沖區(qū)中投放數(shù)據(jù)4編號為3520的消費(fèi)者從緩沖池中第1個(gè)緩沖區(qū)取出數(shù)據(jù)2編號為3520的酒費(fèi)者從度沖池中第2個(gè)度沖區(qū)取出數(shù)據(jù)3生產(chǎn)者在緩沖池第0個(gè)緩沖區(qū)中投放數(shù)據(jù)5編號為420的消費(fèi)者從緩沖池中第3個(gè)緩沖區(qū)取出數(shù)據(jù)"生產(chǎn)者在緩沖池第1個(gè)緩沖區(qū)中投放數(shù)據(jù)6編號為352。的消費(fèi)者從緩沖池中第。個(gè)緩沖區(qū)取出數(shù)據(jù)5生產(chǎn)者在緩沖池第2個(gè)緩沖區(qū)中投放數(shù)據(jù)7編號為42。的消費(fèi)者從緩沖池中第1個(gè)緩沖區(qū)取出數(shù)據(jù)6生產(chǎn)者在緩沖池第3個(gè)緩沖區(qū)中投放數(shù)據(jù)8生產(chǎn)者完成任務(wù),線程結(jié)束運(yùn)行編號為3520的消費(fèi)者從緩沖池中第2個(gè)緩沖區(qū)取出數(shù)據(jù)7編號為420的消費(fèi)者從緩沖池中第3個(gè)緩沖區(qū)取出數(shù)據(jù)8編號為420的消費(fèi)者收到通知,線程結(jié)束運(yùn)行編號為352。的消費(fèi)者從緩沖池中第3個(gè)緩沖區(qū)取出數(shù)據(jù)8編號為3520的消費(fèi)者收到通知,線程結(jié)束運(yùn)行Pressangkeytocontinue.8、實(shí)驗(yàn)結(jié)論、心得體會和改進(jìn)建議:本次實(shí)驗(yàn)是關(guān)于生產(chǎn)者與消費(fèi)者之間互斥和同步的問題。問題的是指是P、V操作,實(shí)驗(yàn)設(shè)一個(gè)共享緩沖區(qū),生產(chǎn)者和消費(fèi)者互斥的使用,當(dāng)一個(gè)線程使用緩沖區(qū)的時(shí)候,另一個(gè)讓其等待直到前一個(gè)線程釋放緩沖區(qū)為止。生產(chǎn)者與消費(fèi)者是一個(gè)與現(xiàn)實(shí)有關(guān)的經(jīng)驗(yàn)問題,通過此原理舉一反三可以解決其他類似的問題。通過本實(shí)驗(yàn)設(shè)計(jì),我們對操作系統(tǒng)的P、V進(jìn)一步的認(rèn)識,深入的了解PV操作的實(shí)質(zhì)和其重要性。課本的理論知識進(jìn)一步闡述了現(xiàn)實(shí)中的實(shí)際問題。2、實(shí)驗(yàn)學(xué)時(shí):23、實(shí)驗(yàn)內(nèi)容和目的:實(shí)驗(yàn)?zāi)康模和ㄟ^本實(shí)驗(yàn)掌握進(jìn)程間的同步和互斥機(jī)制的使用。實(shí)驗(yàn)內(nèi)容:1、有一群生產(chǎn)者進(jìn)程在生產(chǎn)產(chǎn)品,并將這些產(chǎn)品提供給消費(fèi)者進(jìn)程去消費(fèi)。為使生產(chǎn)者進(jìn)程與消費(fèi)者進(jìn)程能并發(fā)執(zhí)行,在兩者之間設(shè)置了一個(gè)具有n個(gè)緩沖區(qū)的緩沖池:生產(chǎn)者進(jìn)程從文件中讀取一個(gè)數(shù)據(jù),并將它存放到一個(gè)緩沖區(qū)中;消費(fèi)者進(jìn)程從一個(gè)緩沖區(qū)中取走數(shù)據(jù),并輸出此數(shù)據(jù)。生產(chǎn)者和消費(fèi)者之間必須保持同步原則:不允許消費(fèi)者進(jìn)程到一個(gè)空緩沖區(qū)去取產(chǎn)品;也不允許生產(chǎn)者進(jìn)程向一個(gè)已裝滿產(chǎn)品且尚未被取走的緩沖區(qū)中投放產(chǎn)品。2、創(chuàng)建3進(jìn)程(或者線程)作為生產(chǎn)者,4個(gè)進(jìn)程(或者線程)作為消費(fèi)者。創(chuàng)建一個(gè)文件作為數(shù)據(jù)源,文件中事先寫入一些內(nèi)容作為數(shù)據(jù)。3、生產(chǎn)者和消費(fèi)者進(jìn)程(或者線程)都具有相同的優(yōu)先級。4、實(shí)驗(yàn)原理:利用進(jìn)程間共享的信號量、互斥鎖等控制線程的同步。相關(guān)函數(shù)說明:信號量sem_tsemjnit信號量初始化)、sem_wait(信號量值減一)、sem_post(信號量值加一)互斥量(線程)pthread_mutex_tpthread_mutex_init(互斥量初始化)pthread_mutexJock(互斥量加鎖)pthread_mutex_unlock(互斥量解鎖)線程和進(jìn)程pthread_t(線程)pid_t(進(jìn)程)pthread_create(創(chuàng)建線程)fork(創(chuàng)建進(jìn)程)pthreadjoin(等待線程結(jié)束)waitpid(停止目前進(jìn)程的執(zhí)行,直到有信號來到或子進(jìn)程結(jié)束)(1)學(xué)生每人一臺PC,安裝WindowsXP^OOO操作系統(tǒng)。(2)局域網(wǎng)絡(luò)環(huán)境。(3)個(gè)人PC安裝VMware虛擬機(jī)和Ubuntu系統(tǒng)。6、實(shí)驗(yàn)步驟:.算法思想生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個(gè)空緩沖區(qū)中供消費(fèi)者線程消費(fèi)。消費(fèi)者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當(dāng)生產(chǎn)者線程生產(chǎn)物品時(shí),如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費(fèi)者線程釋放出一個(gè)空緩沖區(qū)。當(dāng)消費(fèi)者線程消費(fèi)物品時(shí),如果沒有滿的緩沖區(qū),那么消費(fèi)者線程將被阻塞,直到新的物品被生產(chǎn)出來。.流程圖否生產(chǎn)者向隊(duì)列中寫入一個(gè)新元素項(xiàng)否生產(chǎn)者向隊(duì)列中寫入一個(gè)新元素項(xiàng).程序代碼#include<windows.h>#include<iostream.h>#include<fstream.h>#include<string.h>#include<conio.h>〃聲明所需變量intin=O;intout=0;HANDLEh_Thread[20];//線程數(shù)組HANDLEempty_Semaphore;〃表示空緩沖區(qū)的信號量HANDLEfull_Semaphore;〃表示空緩沖區(qū)的信號量HANDLEmutex;structdata(intID;〃序號chartype;〃類型,是生產(chǎn)者還是消費(fèi)者,porcdoubledelay;〃線程延遲的時(shí)間,對應(yīng)生產(chǎn)者生產(chǎn)產(chǎn)品的時(shí)間或消費(fèi)者消費(fèi)產(chǎn)品的時(shí)間);dataThreadlnfo[20];〃線程信息數(shù)組intlength;〃線程信息數(shù)組中實(shí)際的線程個(gè)數(shù)voidProduce(void*p);〃生產(chǎn)者進(jìn)程voidConsume(void*p);〃消費(fèi)者進(jìn)程voidinput(void);intmain(void)(input();〃初始化臨界區(qū)對象//lnitializeCriticalSection(&PC_Critical);empty_Semaphore=CreateSemaphore(NULLz10/10,NULL);full_Semaphore=CreateSemaphore(NULL,0,10,NULL);mutex=::CreateMutex(NULL,FALSE,NULL);cout<<”下面生產(chǎn)者和消費(fèi)者開始工作!!”<<endl;cout?endl;〃創(chuàng)建生產(chǎn)者和消費(fèi)者線程for(inti=O;i(if(Threadlnfo[i].type=='p')h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Produce),&(Threadlnfo[i]),0,NULL);elseif(Threadlnfo[i].type==,c')h_Thread[i]=CreateThread(NULL,07(LPTHREAD_START_ROUTINE)(Consume),&(Threadlnfo[i]),0,NULL);)〃主程序等待各個(gè)線程的動(dòng)作結(jié)束WaitForMultipleObjects(length,h_Thread,TRUE,-l);cout?endl;::Sleep(100);cout<<“所有的生產(chǎn)者和消費(fèi)者都完成了它們的工作!!”<<endl?endl;return0;//〃生產(chǎn)者進(jìn)程*T* *T* *i* “T,^T* ,T■,T■*T**T* *T**T*,T-voidProduce(void*p)(〃局部變量聲明intmyjd;doublemy_delay;〃從線程信息數(shù)組中獲得信息my_id=((data*)(p))->ID;my_delay=((data*)(p))->delay;〃開始請求生產(chǎn)WaitForSingleObject(empty_Semaphore,-l);::WaitForSingleObject(mutex,-l);//EnterCriticalSection(&PC_Critical);cout""生產(chǎn)者”<vmyjd<<“發(fā)出生產(chǎn)請求。"<<endl;cout?endl;cout<<“生產(chǎn)者“<<myjd<<"生產(chǎn)"?endl;in=(in+l);Sleep(my_delay*10);cout<<“生產(chǎn)者完成了生產(chǎn)。”<<endl<<endl;//LeaveCriticalSection(&PC_Critical);ReleaseSemaphore(full_Semaphore,l/NULL);::ReleaseMutex(mutex);Kf4tli4_t|^fa〃消費(fèi)者進(jìn)程voidConsume(void*p)〃局部變量聲明intmyjd;doublemy_delay;〃從線程信息數(shù)組中獲得信息my_id=((data*)(p))->ID;my_delay=((data*)(p))->delay;〃開始請求消費(fèi)WaitForSingleObject(full_Semaphore,-l);::WaitForSingleObject(mutex,-l);//EnterCriticalSection(&PC_Critical);cout<<“消費(fèi)者"<<my_id<〈”發(fā)出消費(fèi)請求。"<<endl;cout?endl;cout<<”消費(fèi)者,,<<myjd<<,'消費(fèi)"?endl;out=(out+l);Sleep(my_delay*10);cout<<“消費(fèi)者完成了消費(fèi)。"<<endl?endl;//LeaveCriticalSection(&PC_Critical)ReleaseSemaphore(empty_Semaphore,l,NULL);::ReleaseMutex(mutex)〃輸入進(jìn)程信息的函數(shù)voidinput(void)(〃定義局部變量intid;charch;doubletime;intk=0;cout<<”********請輸入線程信息:"?encll;cout<<“********線程ID;"?endl;cout<<”********線程的類型(生產(chǎn)者線程,還是消費(fèi)者線程,P代表生產(chǎn)者,C代表消費(fèi)者);"?endl;cout<<“********線程延遲時(shí)間?!?lt;<endl;coutvv"********線程ID為0時(shí)結(jié)束線程信息的輸入!!”<<endl<<endl;while(id!=0)(cout?"pleaseinputathreadID."?endl;cin?id;Threadlnfo[k].ID=id;if(id==O)break;cout?"pleaseinputathreadtype."?endl;cin?ch;Threadlnfo[k].type=c

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論