![操作系統(tǒng)之生產(chǎn)者消費(fèi)者問題(c++實(shí)現(xiàn))_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/eece4b40-9297-4972-8bb2-77e1fa4f3b8a/eece4b40-9297-4972-8bb2-77e1fa4f3b8a1.gif)
![操作系統(tǒng)之生產(chǎn)者消費(fèi)者問題(c++實(shí)現(xiàn))_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/eece4b40-9297-4972-8bb2-77e1fa4f3b8a/eece4b40-9297-4972-8bb2-77e1fa4f3b8a2.gif)
![操作系統(tǒng)之生產(chǎn)者消費(fèi)者問題(c++實(shí)現(xiàn))_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/eece4b40-9297-4972-8bb2-77e1fa4f3b8a/eece4b40-9297-4972-8bb2-77e1fa4f3b8a3.gif)
![操作系統(tǒng)之生產(chǎn)者消費(fèi)者問題(c++實(shí)現(xiàn))_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/eece4b40-9297-4972-8bb2-77e1fa4f3b8a/eece4b40-9297-4972-8bb2-77e1fa4f3b8a4.gif)
![操作系統(tǒng)之生產(chǎn)者消費(fèi)者問題(c++實(shí)現(xiàn))_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/eece4b40-9297-4972-8bb2-77e1fa4f3b8a/eece4b40-9297-4972-8bb2-77e1fa4f3b8a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告專業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名丁可班級B計(jì)123班學(xué)號1210704314指導(dǎo)教師李先鋒完成日期2015年11月20日信息工程學(xué)院題目:生產(chǎn)者-消費(fèi)者問題的模擬實(shí)現(xiàn)一、設(shè)計(jì)目的本課程設(shè)計(jì)是學(xué)習(xí)完“操作系統(tǒng)原理”課程后進(jìn)行的一次全面的綜合訓(xùn)練,通過課程設(shè)計(jì),更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,加深對操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強(qiáng)學(xué)生的動(dòng)手能力。二、設(shè)計(jì)內(nèi)容1、概述用進(jìn)程同步方法解決“生產(chǎn)者-消費(fèi)者”問題,C或C+語言實(shí)現(xiàn)。1、設(shè)計(jì)目的通過研究進(jìn)程并發(fā)和信號量機(jī)制,實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者問題的并發(fā)控制。2、設(shè)計(jì)要求1)每個(gè)生產(chǎn)者和消費(fèi)者對有界緩沖區(qū)進(jìn)行操作后,即時(shí)顯示有界緩
2、沖區(qū)的全部內(nèi)容,當(dāng)前指針位置和生產(chǎn)者/消費(fèi)者進(jìn)程的標(biāo)識符。說明:有界緩沖區(qū)(提示:有界緩沖區(qū)可用數(shù)組實(shí)現(xiàn))內(nèi)設(shè)有20個(gè)存儲單元,放入/取出的數(shù)據(jù)項(xiàng)設(shè)定為1-20這20個(gè)整型數(shù)。2)生產(chǎn)者和消費(fèi)者各有兩個(gè)以上。3)多個(gè)生產(chǎn)者或多個(gè)消費(fèi)者之間須有共享對緩沖區(qū)進(jìn)行操作的函數(shù)代碼。2、設(shè)計(jì)原理在同一個(gè)進(jìn)程地址空間內(nèi)執(zhí)行的兩個(gè)線程生產(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)者線程將被阻塞
3、,直到新的物品被生產(chǎn)出來。3、詳細(xì)設(shè)計(jì)及編碼定義兩個(gè)信號量HANDLE g_hFullSemaphore;/資源信號量:緩沖區(qū)滿HANDLE g_hEmptySemaphore;/資源信號量:緩沖區(qū)空unsigned short in = 0;/用于記錄生產(chǎn)者的指針位置unsigned short out = 0;/用于記錄消費(fèi)者的指針位置HANDLE g_hMutex;/線程間的互斥信號量生產(chǎn)者進(jìn)程while(TRUE) 生產(chǎn)一個(gè)產(chǎn)品; P(g_hEmptySemaphore)
4、; P(mutex1); 產(chǎn)品送往buffer(in); in=(in+1)mod n; V(mutex1); V(g_hFullSemaphore); 消費(fèi)者進(jìn)程while(TRUE) P(g_hFullSemaphore); &
5、#160; P(mutex2); 從buffer(out)中取出產(chǎn)品; out=(out+1)mod n; V(mutex2); V(g_hEmptySemaphore);(算法流程圖、編程及程序注釋等)主要的方法:4、運(yùn)行結(jié)果分析1、運(yùn)行示例在 c+中運(yùn)行源程序 ,程序主界面截圖.按回車及申請資源和緩沖區(qū)進(jìn)行 p 操作和申請互斥(生產(chǎn)者和消費(fèi)者都是2個(gè))(運(yùn)行界面截圖、界面說明、輸入輸出數(shù)據(jù)說明和分析等)附錄代碼:#include <wind
6、ows.h>#include <iostream>const unsigned short SIZE_OF_BUFFER = 20;/有界緩沖區(qū)長度int g_bufferSIZE_OF_BUFFER;/開辟緩沖區(qū)?用數(shù)組表示?可以看成是一個(gè)循環(huán)隊(duì)列unsigned short ProductID = 0;/新生產(chǎn)出來的產(chǎn)品的產(chǎn)品號unsigned short ConsumeID = 0;/被消耗的產(chǎn)品的產(chǎn)品號unsigned short in = 0;/產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)?用于記錄生產(chǎn)者的指針位置unsigned short out = 0;/產(chǎn)品出緩沖區(qū)時(shí)的緩沖區(qū)
7、下標(biāo)?用于記錄消費(fèi)者的指針位置 bool g_continue = 1;/控制程序運(yùn)行:1 表示繼續(xù)運(yùn)行?0 表示停止運(yùn)行HANDLE g_hMutex;/線程間的互斥信號量HANDLE g_hFullSemaphore;/資源信號量:緩沖區(qū)滿HANDLE g_hEmptySemaphore;/資源信號量:緩沖區(qū)空DWORD WINAPI Producer(LPVOID);/生產(chǎn)者線程DWORD WINAPI Consumer(LPVOID);/消費(fèi)者線程const unsigned short PRODUCERS_COUNT=2;/生產(chǎn)者的個(gè)數(shù)const unsigned short CON
8、SUMERS_COUNT=2;/消費(fèi)者的個(gè)數(shù)const unsigned short THREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COUNT;/總線程數(shù)HANDLE hThreadsPRODUCERS_COUNT;/各線程的 handleDWORD producerIDCONSUMERS_COUNT;/生產(chǎn)者線程的標(biāo)識符DWORD consumerIDTHREADS_COUNT;/消費(fèi)者線程的標(biāo)識符/*-程序提示信息開始-*/void info()/程序提示信息std:cout<<"* - - - - - - - - - - - - -
9、 - - - - - - - - - - *"<<std:endl;std:cout<<"| 課程設(shè)計(jì)課題 : 生產(chǎn)者-消費(fèi)者問題的模擬實(shí)現(xiàn) |"<<std:endl;std:cout<<"| 指 導(dǎo) 老 師 : 李先鋒 |"<<std:endl;std:cout<<"| 學(xué) 生 : 丁可 |"<<std:endl;std:cout<<"| 班 級 : B計(jì)123班 |"<<std:endl;std
10、:cout<<"* - - - - - - - - - - - - - - - - - - - - - - - *"<<std:endl;std:cout<<" =按回車開始該程序 "<<std:endl;getchar();/*-程序提示信息結(jié)束-*/*-生產(chǎn)一個(gè)產(chǎn)品開始-*/生產(chǎn)一個(gè)產(chǎn)品:輸出其 ID 號void Produce()std:cout<<std:endl;std:cerr<<"生產(chǎn)一個(gè)產(chǎn)品: "<<+ProductID;std:cou
11、t<<std:endl;/*-生產(chǎn)一個(gè)產(chǎn)品結(jié)束-*/*-把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)開-*/把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)void Append()std:cerr<<"把生產(chǎn)的產(chǎn)品送入緩沖區(qū)"g_bufferin=ProductID;in=(in+1)%SIZE_OF_BUFFER;std:cerr<<std:endl;std:cout<<"緩沖區(qū) 產(chǎn)品 生產(chǎn)者/消費(fèi)者"<<std:endl;/新產(chǎn)品放入緩沖區(qū)后?輸出緩沖區(qū)當(dāng)前的狀態(tài)for(int i=0;i<SIZE_OF_BUFFER;+i)
12、/輸出緩沖區(qū)下標(biāo)if (i<10)std:cout<<i<<" "<<g_bufferi;elsestd:cout<<i<<" "<<g_bufferi;if(i=in)if(g_bufferi<10)std:cout<<" "elsestd:cout<<" "std:cout<<" <- 生產(chǎn)者"/輸出生產(chǎn)者的指針位置if(i=out)if(g_bufferi<1
13、0)std:cout<<" "elsestd:cout<<" "std:cout<<" <- 消費(fèi)者"/輸出消費(fèi)者的指針位置std:cout<<std:endl;/*-把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)結(jié)-*/*-消費(fèi)一個(gè)產(chǎn)品開始-*/void Consume()/消費(fèi)一個(gè)產(chǎn)品std:cout<<std:endl;std:cerr<<"消費(fèi)一個(gè)產(chǎn)品: "<<ConsumeID;std:cout<<std:endl;/*-消費(fèi)
14、一個(gè)產(chǎn)品結(jié)束-*/*-從緩沖區(qū)中取出一個(gè)產(chǎn)品開始-*/從緩沖區(qū)中取出一個(gè)產(chǎn)品void Take()std:cout<<std:endl;std:cerr<<"從緩沖區(qū)取出一個(gè)產(chǎn)品"ConsumeID=g_bufferout;out=(out+1)%SIZE_OF_BUFFER;std:cerr<<std:endl;std:cout<<std:endl;std:cout<<"緩沖區(qū) 產(chǎn)品 生產(chǎn)者/消費(fèi)者"<<std:endl;/取出一個(gè)產(chǎn)品后:輸出緩沖區(qū)當(dāng)前的狀態(tài)for(int i=0
15、;i<SIZE_OF_BUFFER;+i)/輸出緩沖區(qū)下標(biāo)if(i<10)std:cout<<i<<" "<<g_bufferi;elsestd:cout<<i<<" "<<g_bufferi;if(i=in)if(g_bufferi<10)std:cout<<" "elsestd:cout<<" "std:cout<<" <- 生產(chǎn)者"/輸出生產(chǎn)者的指針位置if(
16、i=out)if(g_bufferi<10)std:cout<<" "elsestd:cout<<" "std:cout<<" <- 消費(fèi)者"/輸出消費(fèi)者的指針位置std:cout<<std:endl;/*-從緩沖區(qū)中取出一個(gè)產(chǎn)品結(jié)束-*/*-生產(chǎn)者線程開始-*/生產(chǎn)者線程DWORD WINAPI Producer(LPVOID lpPara)while(g_continue)/資源信號量的 P 操作WaitForSingleObject(g_hFullSemaphore,I
17、NFINITE);/互斥信號量的 P 操作WaitForSingleObject(g_hMutex,INFINITE);/生產(chǎn)一個(gè)產(chǎn)品Produce();/把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)Append();Sleep(2000);/互斥信號量的 V 操作ReleaseMutex(g_hMutex);/資源信號量的 V 操作ReleaseSemaphore(g_hEmptySemaphore,1,NULL);return 0;/*-生產(chǎn)者線程結(jié)束-*/*-消費(fèi)者線程開始-*/消費(fèi)者線程DWORD WINAPI Consumer(LPVOID lpPara)while(g_continue)/資源信號量的
18、 P 操作WaitForSingleObject(g_hEmptySemaphore,INFINITE);/互斥信號量的 P 操作WaitForSingleObject(g_hMutex,INFINITE);/從緩沖區(qū)中取出一個(gè)產(chǎn)品Take();/消費(fèi)一個(gè)產(chǎn)品Consume();Sleep(2000);/互斥信號量的 V 操作ReleaseMutex(g_hMutex);/資源信號量的 V 操作ReleaseSemaphore(g_hFullSemaphore,1,NULL);return 0;/*-消費(fèi)者線程結(jié)束-*/*-創(chuàng)建生產(chǎn)者線程開始-*/void createPT()/創(chuàng)建生產(chǎn)者線程for(int i=0;i<PRODUCERS_COUNT;+i)hThreadsi=CreateThread(NULL,0,Producer,NULL,0,&producerIDi);if(hThreadsi=NULL)g_continue=0;/*-創(chuàng)建生產(chǎn)者線程結(jié)束-*/*-創(chuàng)建消費(fèi)者線程開始-*/void createCT()/創(chuàng)建消費(fèi)者線程for (int j=0;j<CONSUMERS_COUNT;+j)hThrea
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)科技園區(qū)種植項(xiàng)目合作合同
- 大拖拉機(jī)配件購銷合同
- 搭棚施工合同范本
- 委托房地產(chǎn)開發(fā)合同書模板
- 正規(guī)區(qū)域代理合同范本
- 房地產(chǎn)開發(fā)承包合同
- 國際貿(mào)易進(jìn)出口英文合同范本
- 個(gè)人房屋裝修合同標(biāo)準(zhǔn)范文
- 公共廁所的管理制度
- 白酒購買合同模板范文
- 小兒高熱驚厥課件
- 陜西省2024年中考語文真題試卷【附答案】
- 河南省鄭州市二七區(qū)2023-2024學(xué)年七年級下學(xué)期期末考試語文試題
- JB-T 8532-2023 脈沖噴吹類袋式除塵器
- 電網(wǎng)兩票培訓(xùn)課件
- 山東省濟(jì)寧市2023年中考數(shù)學(xué)試題(附真題答案)
- 班組建設(shè)工作匯報(bào)
- 供應(yīng)鏈金融與供應(yīng)鏈融資模式
- 工程類工程公司介紹完整x
- 板帶生產(chǎn)工藝熱連軋帶鋼生產(chǎn)
- 輪機(jī)備件的管理(船舶管理課件)
評論
0/150
提交評論