




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計報告生產(chǎn)者與消費者算法的實現(xiàn)課程名稱:計算機操作系統(tǒng)課程設(shè)計小組成員:班 級:時 間:2010-10-188 / 10文檔可自由編輯打印目錄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致謝:81 課設(shè)簡介:1.1課程設(shè)計題目生產(chǎn)者與消費者算法的實現(xiàn)1.2課程設(shè)計小組成員張洋、巢蕾、段敏1.3小組成員任務(wù)分配情況及每人所占工作比例張 洋 負責(zé):分析設(shè)計消費一個產(chǎn)品方法和主方法并且畫出
2、流程圖,后期組織組內(nèi)成員成果匯總進行本組總體報告撰寫。巢 蕾 負責(zé):分析設(shè)計生產(chǎn)者的行為方法和消費者的行為方法,并且畫出流程圖段 敏 負責(zé):分析設(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)生產(chǎn)者的行
4、為,通過輸入語句的提示程序采用OO設(shè)計模式,緩存區(qū)采用數(shù)組結(jié)構(gòu)存儲。5 生產(chǎn)者與消費者實現(xiàn)代碼#include <windows.h>#include <iostream>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_
5、bufferSIZE_OF_BUFFER; /緩沖區(qū)是個循環(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,NUL
6、L); 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),當生產(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 =
7、1; /消費者的個數(shù) /總的線程數(shù) const unsigned 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;i<PRODUCERS_COUNT;+i) hThreadsi=CreateThread(NULL,0,Produ
8、cer,NULL,0,&producerIDi); if (hThreadsi=NULL) return -1; /創(chuàng)建消費者線程 for (i=0;i<CONSUMERS_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)品。簡單模擬
9、了一下,僅輸出新產(chǎn)品的ID號void Produce() std:cerr << "Producing " << +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_BUFFE
10、R; std:cerr << "Succeed" << std:endl; /輸出緩沖區(qū)當前的狀態(tài) for (int i=0;i<SIZE_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、 /從緩沖區(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;i<SIZE_OF_BUFFER;+i) std:cout << i <<": " << g_bufferi; i
12、f (i=in) std:cout << " <- 生產(chǎn)" if (i=out) std:cout << " <- 消費" std:cout << std:endl; /消耗一個產(chǎn)品void Consume() std:cerr << "Consuming " << ConsumeID << " . " std:cerr << "Succeed" << std:endl;/生產(chǎn)者DWORD
13、 WINAPI Producer(LPVOID lpPara) while(g_continue) WaitForSingleObject(g_hFullSemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); Produce(); Append(); Sleep(1500); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hEmptySemaphore,1,NULL); return 0;/消費者DWORD WINAPI Consumer(LPVOID lpPara) while(g_co
14、ntinue) WaitForSingleObject(g_hEmptySemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); Take(); Consume(); Sleep(1500); ReleaseMutex(g_hMutex); ReleaseSemaphore(g_hFullSemaphore,1,NULL); return 0; /* 一個消費者三個生產(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é)習(xí),雖然在課程設(shè)計中遇到了一些問題,但在老師和同學(xué)的細心指導(dǎo)和熱心幫助下解決了。同時,了解到團隊精神的重要性,也為以后
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨區(qū)域電商與地方特色產(chǎn)業(yè)融合發(fā)展策略
- 2025屆杭州市西湖區(qū)三下數(shù)學(xué)期末經(jīng)典試題含解析
- 固始縣2025年三年級數(shù)學(xué)第二學(xué)期期末檢測試題含解析
- 湖北大學(xué)知行學(xué)院《案例研究與開發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 足浴店客流統(tǒng)計與營銷策略報告
- 2025廣西河池大化文旅投資集團有限公司招聘26人筆試參考題庫附帶答案詳解
- 會東縣2025年五下數(shù)學(xué)期末聯(lián)考試題含答案
- 系統(tǒng)壓力測試評估執(zhí)行標準
- 蘭州石化職業(yè)技術(shù)大學(xué)《水工程經(jīng)濟》2023-2024學(xué)年第二學(xué)期期末試卷
- 廊坊燕京職業(yè)技術(shù)學(xué)院《場景速寫》2023-2024學(xué)年第二學(xué)期期末試卷
- 管理學(xué)原理(南大馬工程)
- 高考必知的自然科學(xué)類基礎(chǔ)知識考試題庫(400題)
- 設(shè)計思維電子課件
- 建筑施工企業(yè)安全生產(chǎn)風(fēng)險分級管控體系-實施指南
- 配位鍵和配位化合物課件
- 國際貨物運輸與保險課后習(xí)題參考答案
- 房地產(chǎn)銷售培訓(xùn)PPT培訓(xùn)課件
- 職業(yè)暴露(銳器傷)應(yīng)急預(yù)案演練腳本
- 建筑設(shè)計電梯計算
- 軌道交通云平臺業(yè)務(wù)關(guān)鍵技術(shù)發(fā)展趨勢
- 打造金融級智能中臺的數(shù)據(jù)底座
評論
0/150
提交評論