




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計報告生產(chǎn)者與消費者算法的實現(xiàn)課程名稱:計算機操作系統(tǒng)課程設(shè)計小組成員:班 級:時 間:2010-10-18目錄1 課設(shè)簡介:11.1課程設(shè)計題目11.2課程設(shè)計小組成員11.3小組成員任務(wù)分配情況及每人所占工作比例12生產(chǎn)者和消費者原理分析13 生產(chǎn)者與消費者功能描述:14 數(shù)據(jù)結(jié)構(gòu)分析25 生產(chǎn)者與消費者實現(xiàn)代碼26心得體會7參考文獻:7相關(guān)工具:8致謝:8操作系統(tǒng)課程設(shè)計生產(chǎn)者與消費者算法實現(xiàn)1 課設(shè)簡介:1.1課程設(shè)計題目生產(chǎn)者與消費者算法的實現(xiàn)1.2課程設(shè)計小組成員張洋、巢蕾、段敏1.3小組成員任務(wù)分配情況及每人所占工作比例張 洋 負責:分析設(shè)計消費一個產(chǎn)品方法和主方法
2、并且畫出流程圖,后期組織組內(nèi)成員成果匯總進行本組總體報告撰寫。巢 蕾 負責:分析設(shè)計生產(chǎn)者的行為方法和消費者的行為方法,并且畫出流程圖段 敏 負責:分析設(shè)計生產(chǎn)產(chǎn)品的方法和把新生產(chǎn)的產(chǎn)品放入緩沖區(qū),并且畫出流程圖。2 生產(chǎn)者和消費者原理分析 在同一個進程地址空間內(nèi)執(zhí)行的兩個線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當生產(chǎn)者線程生產(chǎn)物品時,如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū)。當消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻塞,直到新的物品被生產(chǎn)出來。3 生產(chǎn)者與消費
3、者功能描述:3.1生產(chǎn)者功能描述 在同一個進程地址空間內(nèi)執(zhí)行的兩個線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。當生產(chǎn)者線程生產(chǎn)物品時,如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū)。3.2消費者功能描述消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻塞,直到新的物品被生產(chǎn)出來。3.3程序結(jié)構(gòu)圖:4 數(shù)據(jù)結(jié)構(gòu)分析生產(chǎn)者與消費者實現(xiàn):這其中主要是通過多線程,來實現(xiàn)生產(chǎn)者和消費者之間的協(xié)調(diào)問題。生產(chǎn)者(producer)消費者(consumer):通過一些記錄性變量,來記錄模擬實現(xiàn)生
4、產(chǎn)者的行為,通過輸入語句的提示程序采用oo設(shè)計模式,緩存區(qū)采用數(shù)組結(jié)構(gòu)存儲。5 生產(chǎn)者與消費者實現(xiàn)代碼#include #include const unsigned short size_of_buffer = 10; /緩沖區(qū)長度unsigned short productid = 0; /產(chǎn)品號unsigned short consumeid = 0; /將被消耗的產(chǎn)品號unsigned short in = 0; /產(chǎn)品進緩沖區(qū)時的緩沖區(qū)下標unsigned short out = 0; /產(chǎn)品出緩沖區(qū)時的緩沖區(qū)下標int g_buffersize_of_buffer; /緩沖區(qū)是個循
5、環(huán)隊列bool g_continue = true; /控制程序結(jié)束handle g_hmutex; /用于線程間的互斥handle g_hfullsemaphore; /當緩沖區(qū)滿時迫使生產(chǎn)者等待handle g_hemptysemaphore; /當緩沖區(qū)空時迫使消費者等待dword winapi producer(lpvoid); /生產(chǎn)者線程dword winapi consumer(lpvoid); /消費者線程int main() /創(chuàng)建各個互斥信號 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),當生產(chǎn)者個數(shù)多于消費者個數(shù)時, /生產(chǎn)速度快,生產(chǎn)者經(jīng)常等待消費者;反之,消費者經(jīng)常等待 const unsigned short producers_count = 3; /生產(chǎn)者的個數(shù) const unsigned short consumers_count = 1; /消費者的個數(shù) /總的線程數(shù) const unsig
7、ned short threads_count = producers_count+consumers_count; handle hthreadsproducers_count; /各線程的handle dword produceridconsumers_count; /生產(chǎn)者線程的標識符 dword consumeridthreads_count; /消費者線程的標識符 /創(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)建消費者線程 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() /按回車后終止程序運行 g_continue = false; return 0;/生產(chǎn)一個產(chǎn)品。簡單模擬了一下,僅輸出新產(chǎn)品的id號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ū)當前的狀態(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、費; std:cout std:endl; /從緩沖區(qū)中取出一個產(chǎn)品void take() std:cerr taking a product . ; consumeid = g_bufferout; out = (out+1)%size_of_buffer; std:cerr succeed std:endl; /輸出緩沖區(qū)當前的狀態(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 - 消費; std:cout std:endl; /消耗
11、一個產(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;/消費者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; /* 一個消費
13、者三個生產(chǎn)者:/* 三個生產(chǎn)者三個消費者/*三個消費者一個生產(chǎn)者/*三個生產(chǎn)者四個消費者6 心得體會本次課程設(shè)是關(guān)于生產(chǎn)者與消費者之間互斥和同步的問題。問題的實質(zhì)是p、v操作,實驗設(shè)一個共享緩沖區(qū),生產(chǎn)者和消費者互斥的使用,當一個線程使用緩沖區(qū)的時候,另一個讓其等待直到前一個線程釋放緩沖區(qū)為止。 生產(chǎn)者與消費者是一個與現(xiàn)實有關(guān)的經(jīng)典問題,與“和尚挑水”問題的原理相同,通過此原理舉一反三可以解決其他類似的問題。 通過本課程設(shè)計,我們對操作系統(tǒng)的p、v進一步的認識,深入的了解p、v操作的實質(zhì)和其重要性。課本的理論知識進一步闡述了現(xiàn)實中的實際問題。 實驗中,我們小組分工合作,共同學(xué)習,雖然在課程設(shè)計中遇到了一些問題,但在老師和同學(xué)的細心指導(dǎo)和熱心幫助下解決了。同時,了解到團隊精神的重要性,也為以后的學(xué)習和工作打下了堅實的基礎(chǔ),同時積累了寶貴
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化學(xué)蒸氣發(fā)生-目視比色-智能手機RGB現(xiàn)場檢測砷和硫離子
- 廣東省梅州市某縣開采中礦山的邊坡穩(wěn)定性與綠色建設(shè)綜合評價研究
- 加入小區(qū)保安合同范例
- 以地換房合同范例
- 2025年甲基四氫苯酐項目合作計劃書
- 中標后購貨合同范例
- 交期合約合同范例
- 成都市成華區(qū)下澗槽社區(qū)推進多元共治案例研究
- 人工草地代理合同范例
- 加盟商品服務(wù)合同范例
- 《鐵杵成針》教學(xué)課件
- 激光原理與技術(shù):第六章 調(diào)Q技術(shù)
- 養(yǎng)老護理技術(shù)操作規(guī)范評分標準
- 中國文化概論-緒論
- 網(wǎng)頁設(shè)計基礎(chǔ)ppt課件(完整版)
- 2023高中物理步步高大一輪 第十章 專題強化十八 帶電粒子在有界勻強磁場中的運動
- 供應(yīng)商管理控制流程圖
- 義務(wù)教育語文課程標準(2022年版)
- 初中物理公式總結(jié)大全(最新歸納)
- 小學(xué)四年級《雞兔同籠》優(yōu)秀獲獎公開課分析
- 不均勻系數(shù)和曲率系數(shù)自動升程計算(升級版)
評論
0/150
提交評論