




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
操作系統(tǒng)課程設(shè)計(jì)報(bào)告生產(chǎn)者與消費(fèi)者算法的實(shí)現(xiàn)課程名稱:計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì)小組成員:班級(jí):時(shí)間:2010-10-18目錄1課設(shè)簡(jiǎn)介: 1課程設(shè)計(jì)題目 1課程設(shè)計(jì)小組成員 1小組成員任務(wù)分配情況及每人所占工作比例 12 生產(chǎn)者和消費(fèi)者原理分析 13生產(chǎn)者與消費(fèi)者功能描述: 14數(shù)據(jù)結(jié)構(gòu)分析 25生產(chǎn)者與消費(fèi)者實(shí)現(xiàn)代碼 26 心得體會(huì) 7參考文獻(xiàn): 7相關(guān)工具: 8致謝: 81課設(shè)簡(jiǎn)介:生產(chǎn)者與消費(fèi)者算法的實(shí)現(xiàn)課程設(shè)計(jì)小組成員張洋、巢蕾、段敏小組成員任務(wù)分配情況及每人所占工作比例張洋負(fù)責(zé):分析設(shè)計(jì)消費(fèi)一個(gè)產(chǎn)品方法和主方法并且畫出流程圖,后期組織組內(nèi)成員成果匯總進(jìn)行本組總體報(bào)告撰寫。巢蕾負(fù)責(zé):分析設(shè)計(jì)生產(chǎn)者的行為方法和消費(fèi)者的行為方法,并且畫出流程圖段敏負(fù)責(zé):分析設(shè)計(jì)生產(chǎn)產(chǎn)品的方法和把新生產(chǎn)的產(chǎn)品放入緩沖區(qū),并且畫出流程圖。生產(chǎn)者和消費(fèi)者原理分析在同一個(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)者線程將被阻塞,直到新的物品被生產(chǎn)出來(lái)。3生產(chǎn)者與消費(fèi)者功能描述: 在同一個(gè)進(jìn)程地址空間內(nèi)執(zhí)行的兩個(gè)線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個(gè)空緩沖區(qū)中供消費(fèi)者線程消費(fèi)。當(dāng)生產(chǎn)者線程生產(chǎn)物品時(shí),如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費(fèi)者線程釋放出一個(gè)空緩沖區(qū)。消費(fèi)者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當(dāng)消費(fèi)者線程消費(fèi)物品時(shí),如果沒有滿的緩沖區(qū),那么消費(fèi)者線程將被阻塞,直到新的物品被生產(chǎn)出來(lái)。程序結(jié)構(gòu)圖:4數(shù)據(jù)結(jié)構(gòu)分析生產(chǎn)者與消費(fèi)者實(shí)現(xiàn):這其中主要是通過多線程,來(lái)實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者之間的協(xié)調(diào)問題。生產(chǎn)者(producer)——消費(fèi)者(consumer): 通過一些記錄性變量,來(lái)記錄模擬實(shí)現(xiàn)生產(chǎn)者的行為,通過輸入語(yǔ)句的提示程序采用OO設(shè)計(jì)模式,緩存區(qū)采用數(shù)組結(jié)構(gòu)存儲(chǔ)。5生產(chǎn)者與消費(fèi)者實(shí)現(xiàn)代碼#include<windows.h>#include<iostream>constunsignedshortSIZE_OF_BUFFER=10;//緩沖區(qū)長(zhǎng)度unsignedshortProductID=0;//產(chǎn)品號(hào)unsignedshortConsumeID=0;//將被消耗的產(chǎn)品號(hào)unsignedshortin=0;//產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)unsignedshortout=0;//產(chǎn)品出緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)intg_buffer[SIZE_OF_BUFFER];//緩沖區(qū)是個(gè)循環(huán)隊(duì)列boolg_continue=true;//控制程序結(jié)束HANDLEg_hMutex;//用于線程間的互斥HANDLEg_hFullSemaphore;//當(dāng)緩沖區(qū)滿時(shí)迫使生產(chǎn)者等待HANDLEg_hEmptySemaphore;//當(dāng)緩沖區(qū)空時(shí)迫使消費(fèi)者等待DWORDWINAPIProducer(LPVOID);//生產(chǎn)者線程DWORDWINAPIConsumer(LPVOID);//消費(fèi)者線程intmain(){//創(chuàng)建各個(gè)互斥信號(hào)g_hMutex=CreateMutex(NULL,FALSE,NULL);g_hFullSemaphore=CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);g_hEmptySemaphore=CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);//調(diào)整下面的數(shù)值,可以發(fā)現(xiàn),當(dāng)生產(chǎn)者個(gè)數(shù)多于消費(fèi)者個(gè)數(shù)時(shí),//生產(chǎn)速度快,生產(chǎn)者經(jīng)常等待消費(fèi)者;反之,消費(fèi)者經(jīng)常等待constunsignedshortPRODUCERS_COUNT=3;//生產(chǎn)者的個(gè)數(shù)constunsignedshortCONSUMERS_COUNT=1;//消費(fèi)者的個(gè)數(shù)//總的線程數(shù)constunsignedshortTHREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COUNT;HANDLEhThreads[PRODUCERS_COUNT];//各線程的handleDWORDproducerID[CONSUMERS_COUNT];//生產(chǎn)者線程的標(biāo)識(shí)符DWORDconsumerID[THREADS_COUNT];//消費(fèi)者線程的標(biāo)識(shí)符//創(chuàng)建生產(chǎn)者線程for(inti=0;i<PRODUCERS_COUNT;++i){hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,&producerID[i]);if(hThreads[i]==NULL)return-1;}//創(chuàng)建消費(fèi)者線程for(i=0;i<CONSUMERS_COUNT;++i){hThreads[PRODUCERS_COUNT+i]=CreateThread(NULL,0,Consumer,NULL,0,&consumerID[i]);if(hThreads[i]==NULL)return-1;}while(g_continue){if(getchar()){//按回車后終止程序運(yùn)行g(shù)_continue=false;}}return0;}//生產(chǎn)一個(gè)產(chǎn)品。簡(jiǎn)單模擬了一下,僅輸出新產(chǎn)品的ID號(hào)voidProduce(){std::cerr<<"Producing"<<++ProductID<<"...";std::cerr<<"Succeed"<<std::endl;}//把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)voidAppend(){std::cerr<<"Appendingaproduct...";g_buffer[in]=ProductID;in=(in+1)%SIZE_OF_BUFFER;std::cerr<<"Succeed"<<std::endl;//輸出緩沖區(qū)當(dāng)前的狀態(tài)for(inti=0;i<SIZE_OF_BUFFER;++i){std::cout<<i<<":"<<g_buffer[i];if(i==in)std::cout<<"<--生產(chǎn)";if(i==out)std::cout<<"<--消費(fèi)";std::cout<<std::endl;}}//從緩沖區(qū)中取出一個(gè)產(chǎn)品voidTake(){std::cerr<<"Takingaproduct...";ConsumeID=g_buffer[out];out=(out+1)%SIZE_OF_BUFFER;std::cerr<<"Succeed"<<std::endl;//輸出緩沖區(qū)當(dāng)前的狀態(tài)for(inti=0;i<SIZE_OF_BUFFER;++i){std::cout<<i<<":"<<g_buffer[i];if(i==in)std::cout<<"<--生產(chǎn)";if(i==out)std::cout<<"<--消費(fèi)";std::cout<<std::endl;}}//消耗一個(gè)產(chǎn)品voidConsume(){std::cerr<<"Consuming"<<ConsumeID<<"...";std::cerr<<"Succeed"<<std::endl;}//生產(chǎn)者DWORDWINAPIProducer(LPVOIDlpPara){while(g_continue){WaitForSingleObject(g_hFullSemaphore,INFINITE);WaitForSingleObject(g_hMutex,INFINITE);Produce();Append();Sleep(1500);ReleaseMutex(g_hMutex);ReleaseSemaphore(g_hEmptySemaphore,1,NULL);}return0;}//消費(fèi)者DWORDWINAPIConsumer(LPVOIDlpPara){while(g_continue){WaitForSingleObject(g_hEmptySemaphore,INFINITE);WaitForSingleObject(g_hMutex,INFINITE);Take();Consume();Sleep(1500);ReleaseMutex(g_hMutex);ReleaseSemaphore(g_hFullSemaphore,1,NULL);}return0;}/*一個(gè)消費(fèi)者三個(gè)生產(chǎn)者:/*三個(gè)生產(chǎn)者三個(gè)消費(fèi)者/*三個(gè)消費(fèi)者一個(gè)生產(chǎn)者/*三個(gè)生產(chǎn)者四個(gè)消費(fèi)者心得體會(huì)本次課程設(shè)是關(guān)于生產(chǎn)者與消費(fèi)者之間互斥和同步的問題。問題的實(shí)質(zhì)是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)典問題,與“和尚挑水”問題的原理相同,通過此原理舉一反三可以解決其他類似的問題。通過本課程設(shè)計(jì),我們對(duì)操作系統(tǒng)的p、v進(jìn)一步的認(rèn)識(shí),深入的了解p、v操作的實(shí)質(zhì)和其重要性。課本的理論知識(shí)進(jìn)一步闡述了現(xiàn)實(shí)中的實(shí)際問題。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東省惠州市單招職業(yè)適應(yīng)性考試題庫(kù)有答案
- 2025年廣西交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)及答案1套
- 2025年北京戲曲藝術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)及答案1套
- 2025年博爾塔拉職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)有答案
- 2025年川南幼兒師范高等??茖W(xué)校單招綜合素質(zhì)考試題庫(kù)及答案參考
- 2025年福州外語(yǔ)外貿(mào)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- 2025年貴州健康職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)含答案
- 2025年成都工貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)參考答案
- 2025年畢節(jié)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)參考答案
- 大型模具采購(gòu)合同招標(biāo)
- 本科:交通管理專業(yè)培養(yǎng)方案(管理學(xué)院)
- 變電管理所SF6氣體泄漏應(yīng)急處置方案
- 環(huán)境污染刑事案件兩高司法解釋解 讀
- 養(yǎng)殖場(chǎng)滅鼠方案
- 《汽車電子電氣系統(tǒng)構(gòu)造與拆裝》課件 項(xiàng)目三 起動(dòng)系統(tǒng)檢修
- 《安徒生童話》閱讀指導(dǎo)課件
- 沉淀滴定法(應(yīng)用化學(xué)課件)
- 室外道路及管網(wǎng)工程擬投入的主要施工機(jī)械設(shè)備及測(cè)量?jī)x器表
- 07K506 多聯(lián)式空調(diào)機(jī)系統(tǒng)設(shè)計(jì)與施工安裝
- 腹部外傷護(hù)理查房記錄
- 橋面鋪裝三維激光攤鋪施工工法
評(píng)論
0/150
提交評(píng)論