版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(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)介:11.1課程設(shè)計(jì)題目11.2課程設(shè)計(jì)小組成員11.3小組成員任務(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致謝:8操作系統(tǒng)課程設(shè)計(jì)生產(chǎn)者與消費(fèi)者算法實(shí)現(xiàn)1 課設(shè)簡(jiǎn)介:1.1課程設(shè)計(jì)題目生產(chǎn)者與消費(fèi)者算法的實(shí)現(xiàn)1.2課程設(shè)計(jì)小組成員張洋、巢蕾、段敏1.3小組成員任務(wù)分配情況及每人所占工作比例張 洋 負(fù)責(zé):分析設(shè)計(jì)消費(fèi)一個(gè)產(chǎn)品方法和主方法
2、并且畫(huà)出流程圖,后期組織組內(nèi)成員成果匯總進(jìn)行本組總體報(bào)告撰寫(xiě)。巢 蕾 負(fù)責(zé):分析設(shè)計(jì)生產(chǎn)者的行為方法和消費(fèi)者的行為方法,并且畫(huà)出流程圖段 敏 負(fù)責(zé):分析設(shè)計(jì)生產(chǎn)產(chǎn)品的方法和把新生產(chǎn)的產(chǎn)品放入緩沖區(qū),并且畫(huà)出流程圖。2 生產(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í),如果沒(méi)有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費(fèi)者線程釋放出一個(gè)空緩沖區(qū)。當(dāng)消費(fèi)者線程消費(fèi)物品時(shí),如果沒(méi)有滿的緩沖區(qū),那么消費(fèi)者線程將被阻塞,直到新的物品被生產(chǎn)出來(lái)。3 生產(chǎn)者與消費(fèi)
3、者功能描述:3.1生產(chǎn)者功能描述 在同一個(gè)進(jìn)程地址空間內(nèi)執(zhí)行的兩個(gè)線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個(gè)空緩沖區(qū)中供消費(fèi)者線程消費(fèi)。當(dāng)生產(chǎn)者線程生產(chǎn)物品時(shí),如果沒(méi)有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費(fèi)者線程釋放出一個(gè)空緩沖區(qū)。3.2消費(fèi)者功能描述消費(fèi)者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當(dāng)消費(fèi)者線程消費(fèi)物品時(shí),如果沒(méi)有滿的緩沖區(qū),那么消費(fèi)者線程將被阻塞,直到新的物品被生產(chǎn)出來(lái)。3.3程序結(jié)構(gòu)圖:4 數(shù)據(jù)結(jié)構(gòu)分析生產(chǎn)者與消費(fèi)者實(shí)現(xiàn):這其中主要是通過(guò)多線程,來(lái)實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者之間的協(xié)調(diào)問(wèn)題。生產(chǎn)者(producer)消費(fèi)者(consumer):通過(guò)一些記錄性變量,來(lái)記錄模擬實(shí)現(xiàn)生
4、產(chǎn)者的行為,通過(guò)輸入語(yǔ)句的提示程序采用oo設(shè)計(jì)模式,緩存區(qū)采用數(shù)組結(jié)構(gòu)存儲(chǔ)。5 生產(chǎn)者與消費(fèi)者實(shí)現(xiàn)代碼#include #include const unsigned short size_of_buffer = 10; /緩沖區(qū)長(zhǎng)度unsigned short productid = 0; /產(chǎn)品號(hào)unsigned short consumeid = 0; /將被消耗的產(chǎn)品號(hào)unsigned short in = 0; /產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)unsigned short out = 0; /產(chǎn)品出緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)int g_buffersize_of_buffer; /緩沖區(qū)是個(gè)循
5、環(huán)隊(duì)列bool g_continue = true; /控制程序結(jié)束handle g_hmutex; /用于線程間的互斥handle g_hfullsemaphore; /當(dāng)緩沖區(qū)滿時(shí)迫使生產(chǎn)者等待handle g_hemptysemaphore; /當(dāng)緩沖區(qū)空時(shí)迫使消費(fèi)者等待dword winapi producer(lpvoid); /生產(chǎn)者線程dword winapi consumer(lpvoid); /消費(fèi)者線程int main() /創(chuàng)建各個(gè)互斥信號(hào) g_hmutex = createmutex(null,false,null); g_hfullsemaphore = create
6、semaphore(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)常等待 const unsigned short producers_count = 3; /生產(chǎn)者的個(gè)數(shù) const unsigned short consumers_count = 1; /消費(fèi)者的個(gè)數(shù) /總的線程數(shù) const unsig
7、ned short threads_count = producers_count+consumers_count; handle hthreadsproducers_count; /各線程的handle dword produceridconsumers_count; /生產(chǎn)者線程的標(biāo)識(shí)符 dword consumeridthreads_count; /消費(fèi)者線程的標(biāo)識(shí)符 /創(chuàng)建生產(chǎn)者線程 for (int i=0;iproducers_count;+i) hthreadsi=createthread(null,0,producer,null,0,&produceridi); if (hth
8、readsi=null) return -1; /創(chuàng)建消費(fèi)者線程 for (i=0;iconsumers_count;+i) hthreadsproducers_count+i=createthread(null,0,consumer,null,0,&consumeridi); if (hthreadsi=null) return -1; while(g_continue) if(getchar() /按回車(chē)后終止程序運(yùn)行 g_continue = false; return 0;/生產(chǎn)一個(gè)產(chǎn)品。簡(jiǎn)單模擬了一下,僅輸出新產(chǎn)品的id號(hào)void produce() std:cerr produci
9、ng +productid . ; std:cerr succeed std:endl;/把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)void append() std:cerr appending a product . ; g_bufferin = productid; in = (in+1)%size_of_buffer; std:cerr succeed std:endl; /輸出緩沖區(qū)當(dāng)前的狀態(tài) for (int i=0;isize_of_buffer;+i) std:cout i : g_bufferi; if (i=in) std:cout - 生產(chǎn); if (i=out) std:cout - 消
10、費(fèi); std:cout std:endl; /從緩沖區(qū)中取出一個(gè)產(chǎn)品void take() std:cerr taking a product . ; consumeid = g_bufferout; out = (out+1)%size_of_buffer; std:cerr succeed std:endl; /輸出緩沖區(qū)當(dāng)前的狀態(tài) for (int i=0;isize_of_buffer;+i) std:cout i : g_bufferi; if (i=in) std:cout - 生產(chǎn); if (i=out) std:cout - 消費(fèi); std:cout std:endl; /消耗
11、一個(gè)產(chǎn)品void consume() std:cerr consuming consumeid . ; std:cerr succeed std:endl;/生產(chǎn)者dword winapi producer(lpvoid lppara) while(g_continue) waitforsingleobject(g_hfullsemaphore,infinite); waitforsingleobject(g_hmutex,infinite); produce(); append(); sleep(1500); releasemutex(g_hmutex); releasesemaphore(
12、g_hemptysemaphore,1,null); return 0;/消費(fèi)者dword winapi consumer(lpvoid lppara) while(g_continue) waitforsingleobject(g_hemptysemaphore,infinite); waitforsingleobject(g_hmutex,infinite); take(); consume(); sleep(1500); releasemutex(g_hmutex); releasesemaphore(g_hfullsemaphore,1,null); return 0; /* 一個(gè)消費(fèi)
13、者三個(gè)生產(chǎn)者:/* 三個(gè)生產(chǎn)者三個(gè)消費(fèi)者/*三個(gè)消費(fèi)者一個(gè)生產(chǎn)者/*三個(gè)生產(chǎn)者四個(gè)消費(fèi)者6 心得體會(huì)本次課程設(shè)是關(guān)于生產(chǎn)者與消費(fèi)者之間互斥和同步的問(wèn)題。問(wèn)題的實(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)典問(wèn)題,與“和尚挑水”問(wèn)題的原理相同,通過(guò)此原理舉一反三可以解決其他類(lèi)似的問(wèn)題。 通過(guò)本課程設(shè)計(jì),我們對(duì)操作系統(tǒng)的p、v進(jìn)一步的認(rèn)識(shí),深入的了解p、v操作的實(shí)質(zhì)和其重要性。課本的理論知識(shí)進(jìn)一步闡述了現(xiàn)實(shí)中的實(shí)際問(wèn)題。 實(shí)驗(yàn)中,我們小組分工合作,共同學(xué)習(xí),雖然在課程設(shè)計(jì)中遇到了一些問(wèn)題,但在老師和同學(xué)的細(xì)心指導(dǎo)和熱心幫助下解決了。同時(shí),了解到團(tuán)隊(duì)精神的重要性,也為以后的學(xué)習(xí)和工作打下了堅(jiān)實(shí)的基礎(chǔ),同時(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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Module 10 Unit 2 You shouldn't be late(說(shuō)課稿)-2024-2025學(xué)年外研版(一起)英語(yǔ)五年級(jí)上冊(cè)001
- 16 滑輪 說(shuō)課稿-2023-2024學(xué)年科學(xué)六年級(jí)上冊(cè)青島版001
- 3 珍貴的淡水資源(說(shuō)課稿)-2023-2024學(xué)年四年級(jí)科學(xué)下冊(cè)大象版
- 3 我不拖拉 第2課時(shí)(說(shuō)課稿)-2023-2024學(xué)年道德與法治一年級(jí)下冊(cè)統(tǒng)編版
- 2023二年級(jí)數(shù)學(xué)上冊(cè) 二 角的初步認(rèn)識(shí) 銳角和鈍角說(shuō)課稿 西師大版
- 19《夜宿山寺》說(shuō)課稿-2024-2025學(xué)年二年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 2023八年級(jí)道德與法治上冊(cè) 第四單元 維護(hù)國(guó)家利益 第八課 國(guó)家利益至上 第1框 國(guó)家好 大家才會(huì)好說(shuō)課稿 新人教版
- 2024年八年級(jí)道德與法治下冊(cè) 第三單元 人民當(dāng)家作主 第五課 我國(guó)基本制度 第2框 根本政治制度說(shuō)課稿 新人教版
- 2024年秋九年級(jí)歷史上冊(cè) 第一單元 古代亞非文明 第3課 古代印度說(shuō)課稿2 新人教版001
- 2025北京建筑材料購(gòu)貨合同
- 小學(xué)生必備古詩(shī)
- 人教版英語(yǔ)八年級(jí)上冊(cè)單詞默寫(xiě)表
- SRE Google運(yùn)維解密(中文版)
- 綜合性學(xué)習(xí)公開(kāi)課《我的語(yǔ)文生活》一等獎(jiǎng)?wù)n件
- IBM:中建八局ERP解決方案
- 高考語(yǔ)文復(fù)習(xí)高中語(yǔ)文文言文注釋集萃
- 初中歷史 教材分析與教學(xué)策略 課件
- 幼兒剪紙-打印版
- 中小學(xué)2021年秋季開(kāi)學(xué)第一課手心班會(huì)圖文精品
- 如何提高和加強(qiáng)人力資源隊(duì)伍的建設(shè)
- 四川省綿陽(yáng)市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
評(píng)論
0/150
提交評(píng)論