版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
實驗三生產(chǎn)者、消費者問題2012-04實驗三生產(chǎn)者、消費者問題實驗?zāi)康模赫莆栈镜耐交コ馑惴?,理解生產(chǎn)者和消費者模型。了解Windows2000/XP中多線程的并發(fā)執(zhí)行機制,線程間的同步和互斥。學(xué)習(xí)使用Windows2000/XP中基本的同步對象,掌握相應(yīng)的API實驗三生產(chǎn)者、消費者問題課件的內(nèi)容組織:(一)相關(guān)基礎(chǔ)知識
1、進程同步
2、同步對象
3、生產(chǎn)消費者模型 模型特點(緩沖池、生產(chǎn)和消費的規(guī)則、測試用例)實驗三生產(chǎn)者、消費者問題課件的內(nèi)容組織:(二)程序的實現(xiàn): 1、實驗環(huán)境 2、相關(guān)API:有關(guān)操縱同步對象API實驗三生產(chǎn)者、消費者問題程序的結(jié)構(gòu).函數(shù): 一個主函數(shù)、 兩個模擬(生產(chǎn)、消費)函數(shù)、 三個輔助函數(shù).數(shù)據(jù)結(jié)構(gòu):
產(chǎn)品緩沖區(qū)、 線程信息、 同步對象(寫寫互斥:互斥量;讀寫同步:信號量;讀互斥:臨界區(qū);臨界資源:信號量)實驗三生產(chǎn)者、消費者問題相關(guān)基礎(chǔ)知識——進程同步1
進程同步:為避免OS在多道程序環(huán)境下由于進程的異步性給系統(tǒng)造成混亂引入同步機制。其主要任務(wù)是使并發(fā)執(zhí)行的進程(含線程)之間能有效地共享資源和相互合作。實驗三生產(chǎn)者、消費者問題進程相互間的制約關(guān)系:◆間接相互制約:源于各進程對臨界資源的訪問,用互斥方式協(xié)調(diào)進程◆直接相互制約:源于進程間為共同完成任務(wù)的相互合作,用同步方式協(xié)調(diào)進程
相關(guān)基礎(chǔ)知識——進程同步2實驗三生產(chǎn)者、消費者問題
同步對象:是指Windows用來實現(xiàn)同步和互斥的實體。下面是常見的同步對象:信號量(Semaphore)、互斥量(Mutex)、臨界段(CriticalSection)事件(Event)等。相關(guān)基礎(chǔ)知識——同步對象1實驗三生產(chǎn)者、消費者問題同步對象的使用:①創(chuàng)建或者初始化;②請求該同步對象,隨即進入臨界區(qū),這一步對應(yīng)于互斥量的上鎖;③釋放該同步對象,這一步對應(yīng)于互斥量的解鎖。相關(guān)基礎(chǔ)知識——同步對象2實驗三生產(chǎn)者、消費者問題通常這些對象是全局的,或者對相關(guān)進程(或線程)來說是全局的,所以可以在一個進程中創(chuàng)建的同步對象,在其他線程中都可以使用,從而實現(xiàn)了同步互斥。互斥量、信號量、事件可以跨線程甚至跨進程使用以實現(xiàn)同步。相關(guān)基礎(chǔ)知識——同步對象3實驗三生產(chǎn)者、消費者問題模型特點:
主進程中創(chuàng)建n個線程來模擬生產(chǎn)者或者消費者。生產(chǎn)者生產(chǎn)產(chǎn)品,消費者只消費指定生產(chǎn)者的產(chǎn)品。相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型1實驗三生產(chǎn)者、消費者問題緩沖池(本實驗是數(shù)組)代表產(chǎn)品,緩沖池的不同值代表產(chǎn)品的狀態(tài): -1:空閑; -2:被寫狀態(tài); 其他值(大于0):可消費的產(chǎn)品編號(以生成者的線程編號表示)相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型2實驗三生產(chǎn)者、消費者問題緩沖池不是環(huán)形循環(huán)的,也不要求按順序訪問。生產(chǎn)者可以把產(chǎn)品放到目前某一個空緩沖區(qū)中。
共享緩沖區(qū)作為空閑空間的條件:共享緩沖區(qū)的數(shù)據(jù)滿足了所有關(guān)于它的消費需求,此時該空閑空間允許新的生產(chǎn)者使用。相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型3實驗三生產(chǎn)者、消費者問題為生產(chǎn)者分配緩沖區(qū)時各生產(chǎn)者間必須互斥,此后各個生產(chǎn)者的具體生產(chǎn)活動可以并發(fā)。
消費者之間只有在對同一產(chǎn)品進行消費時才需要互斥,同時在消費過程結(jié)束時需要判斷該消費對象是否已經(jīng)消費完畢并清除該產(chǎn)品。相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型4實驗三生產(chǎn)者、消費者問題線程信息的結(jié)構(gòu):線程信息寫入“測試用例文件”(為一個文本文件)中,格式和含義如下: 3 1 P 3 2 P 4 3 C 4 1 4 P 2 5 C 3 1 2 4
相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型5緩沖區(qū)數(shù)量線程號P:生產(chǎn)者,C:消費者線程開始生產(chǎn)、消費前的休眠時間消費產(chǎn)品所對應(yīng)生產(chǎn)者的線程號實驗三生產(chǎn)者、消費者問題第一行說明程序中設(shè)置幾個緩沖區(qū),其余每行分別描述了一個生產(chǎn)者或者消費者線程的信息。
每一行的各字段間用Tab鍵隔開。不管是消費者還是生產(chǎn)者,都有一個對應(yīng)的線程號,即每一行開始字段那個整數(shù)。相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型6實驗三生產(chǎn)者、消費者問題第二個字段用字母P或者C區(qū)分是生產(chǎn)者還是消費者。第三個字段表示在進入相應(yīng)線程后,在進行生產(chǎn)和消費動作前的休眠時間,以秒計時;通過調(diào)整這一列參數(shù),控制開始進行生產(chǎn)和消費動作的時間。相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型7實驗三生產(chǎn)者、消費者問題如果是代表生產(chǎn)者,則該行只有三個字段。如果代表消費者,則該行后邊還有若干字段,代表要求消費的產(chǎn)品所對應(yīng)的生產(chǎn)者的線程號。
生產(chǎn)和消費的規(guī)則: ◆共享緩沖區(qū)存在空閑空間時,生產(chǎn)者即可使用共享緩沖區(qū)。相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型8實驗三生產(chǎn)者、消費者問題◆某一生產(chǎn)者生產(chǎn)一個產(chǎn)品后,可能不止一個消費者,或者一個消費者多次地請求消費該產(chǎn)品。此時,只有當(dāng)所有的消費需求都被滿足以后,該產(chǎn)品所在的共享緩沖區(qū)才可以被釋放,并作為空閑空間允許新的生產(chǎn)者使用。相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型9實驗三生產(chǎn)者、消費者問題◆每個消費者線程的各個消費需求之間存在嚴(yán)格的先后順序。 如
“5C3124”,可知這代表一個消費線程,該線程請求消費順序嚴(yán)格為1、2、4號生產(chǎn)者線程生產(chǎn)的產(chǎn)品。相關(guān)基礎(chǔ)知識——生產(chǎn)消費者模型10實驗三生產(chǎn)者、消費者問題WindowsXP+VC++6.0利用WindowsSDK提供的系統(tǒng)接口(API,應(yīng)用程序接口)完成程序的功能。API是操作系統(tǒng)提供的用來進行應(yīng)用程序設(shè)計的系統(tǒng)功能接口。使用API,需要包含對API函數(shù)進行說明的SDK頭文件,最常見的就是windows.h程序的實現(xiàn)——實驗環(huán)境實驗三生產(chǎn)者、消費者問題
CreateThread功能:創(chuàng)建一個線程,該線程在調(diào)用進程的地址空間中執(zhí)行。格式:HANDLECreateThread( LPSECURITY_ATTRIBUTESlpThreadAttributes, DWORDdwStackSize,
LPTHREAD_START_ROUTINElpStartAddress, LPVOIDlpparamiter, DWORDdwCreationFlags, LPDWORDlpThreadId);參數(shù):lpStartAddress:函數(shù)指針,新創(chuàng)建的線程要執(zhí)行該函數(shù)。程序的實現(xiàn)—相關(guān)API函數(shù)的介紹1實驗三生產(chǎn)者、消費者問題
CreateMutex功能:產(chǎn)生一個命名的或者匿名的互斥量對象。WaitForSingleObject(對應(yīng)p操作)鎖上互斥鎖,ReleaseMutex(對應(yīng)v操作)打開互斥鎖格式:
HANDLECreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOLbInitialOwner, LPCTSTRlpName);
程序的實現(xiàn)—相關(guān)API函數(shù)的介紹2實驗三生產(chǎn)者、消費者問題CreateSemaphore功能:創(chuàng)建一個命名的或者匿名的信號量對象。信號量可以看作是在互斥量上的一個擴展。格式:HANDLECreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONGlInitialCount, LONGlMaximumCount, LPCTSTRlpName);程序的實現(xiàn)—相關(guān)API函數(shù)的介紹3實驗三生產(chǎn)者、消費者問題
WaitForSingleObject功能:使程序處于等待狀態(tài),直到信號量(或互斥量)hHandle出現(xiàn)或者超過規(guī)定的等待最長時間,信號量出現(xiàn)指信號量大于或等于1,互斥量出現(xiàn)指打開互斥鎖。在該函數(shù)返回之前將信號量減1或者鎖上互斥鎖。格式: DWORDWaitForSingleObject( HANDLEhHandle, DWORDdwMilliseconds);
程序的實現(xiàn)—相關(guān)API函數(shù)的介紹4實驗三生產(chǎn)者、消費者問題ReleaseSemaphore功能:將所指信號量加上指定大小的一個量,執(zhí)行成功,則返回非0值。格式: BOOLReleaseSemaphore( HANDLEhSemaphore, LONGlReleaseCount, LPLONGlpPreviousCount);程序的實現(xiàn)—相關(guān)API函數(shù)的介紹5實驗三生產(chǎn)者、消費者問題
ReleaseMutex功能:用來打開互斥量,即將互斥量加1。成功調(diào)用則返回0。格式: BOOLReleaseMutex( HANDLEhMutex//互斥量指針);
程序的實現(xiàn)—相關(guān)API函數(shù)的介紹6實驗三生產(chǎn)者、消費者問題
InitializeCriticalSection
功能:該函數(shù)初始化臨界區(qū)對象。格式:VOIDInitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);參數(shù)說明lpCriticalSection:指向臨界區(qū)對象的指針程序的實現(xiàn)—相關(guān)API函數(shù)的介紹7實驗三生產(chǎn)者、消費者問題EnterCriticalSection功能:該函數(shù)用于等待指定臨界區(qū)對象的所有權(quán)。當(dāng)調(diào)用線程被賦予所有權(quán)時,該函數(shù)返回。格式:VOIDEnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection);參數(shù)說明 lpCriticalSection:指向臨界區(qū)對象的指針。
程序的實現(xiàn)—相關(guān)API函數(shù)的介紹8實驗三生產(chǎn)者、消費者問題LeaveCriticalSection功能:該函數(shù)釋放指定的臨界區(qū)對象的所有權(quán)。格式:VOIDLeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection);參數(shù)說明 lpCriticalSection:指向臨界區(qū)對象的指針。程序的實現(xiàn)—相關(guān)API函數(shù)的介紹9實驗三生產(chǎn)者、消費者問題一個主函數(shù):初始化緩沖區(qū)和各個同步對象并完成線程信息的讀入和記錄,最后根據(jù)該組線程記錄啟動模擬線程,并等待所有線程的運動結(jié)束后退出整個程序。程序的實現(xiàn)——程序的結(jié)構(gòu)1實驗三生產(chǎn)者、消費者問題
程序的實現(xiàn)——程序的結(jié)構(gòu)2用于模擬消費和生產(chǎn)者的兩個函數(shù):運行于相應(yīng)線程中完成對緩沖區(qū)的讀寫動作,生產(chǎn)者和消費者線程之間通過同步對象的使用實現(xiàn)了生產(chǎn)和消費動作的同步與互斥,是本實驗的核心所在。實驗三生產(chǎn)者、消費者問題三個輔助函數(shù): FindProducePosition:找出當(dāng)前可以進行產(chǎn)品生產(chǎn)的空緩沖區(qū)位置 FindBufferPosition:找出當(dāng)前所需生產(chǎn)者生產(chǎn)的產(chǎn)品位置 IfInOtherRequest:確認(rèn)是否還有對同一產(chǎn)品的消費請求未執(zhí)行程序的流程圖如下圖所示。程序的實現(xiàn)——程序的結(jié)構(gòu)3實驗三生產(chǎn)者、消費者問題主函數(shù)實驗三生產(chǎn)者、消費者問題生產(chǎn)者線程實驗三生產(chǎn)者、消費者問題消費者線程實驗三生產(chǎn)者、消費者問題分析生產(chǎn)消費模型及程序結(jié)構(gòu),定義如下數(shù)據(jù)結(jié)構(gòu):用一個整型數(shù)組Buffer_Critical來代表緩沖區(qū)。生產(chǎn)產(chǎn)品、消費產(chǎn)品都需要訪問該組緩沖區(qū)。程序的實現(xiàn)——數(shù)據(jù)結(jié)構(gòu)1實驗三生產(chǎn)者、消費者問題自定義結(jié)構(gòu)體ThreadInfo記錄一條線程的信息,即將測試用例文件中的一行信息記錄下來,用于程序創(chuàng)建相應(yīng)的生產(chǎn)者或者消費者ThreadInfo結(jié)構(gòu)類型的數(shù)組Thread_Info存放多個線程信息。程序的實現(xiàn)——數(shù)據(jù)結(jié)構(gòu)2實驗三生產(chǎn)者、消費者問題structThreadInfo{ int serial; //線程序列號 char entity; //是P還是C doubledelay; //線程延遲時間 int thread_request[MAX_THREAD_NUM]; //線程請求隊列 int n_request; //請求個數(shù)};
程序的實現(xiàn)——數(shù)據(jù)結(jié)構(gòu)3實驗三生產(chǎn)者、消費者問題
實驗用到的同步對象:生產(chǎn)者之間的寫寫互斥:定義互斥量h_mutex,使生產(chǎn)者互斥訪問下一個可用于生產(chǎn)的空臨界區(qū)。
程序的實現(xiàn)——數(shù)據(jù)結(jié)構(gòu)4實驗三生產(chǎn)者、消費者問題消費者和生產(chǎn)者之間的讀寫同步:每一個生產(chǎn)者用一個信號量與其消費者同步,通過設(shè)置h_Semaphore[MAX_THREAD_NUM]信號量數(shù)組實現(xiàn),該組信號量用于表示相應(yīng)產(chǎn)品已生產(chǎn)。程序的實現(xiàn)——數(shù)據(jù)結(jié)構(gòu)5實驗三生產(chǎn)者、消費者問題消費者之間的讀互斥:每一個緩沖區(qū)用一個同步對象實現(xiàn)該緩沖區(qū)上消費者之間的互斥,這通過設(shè)置臨界區(qū)對象數(shù)組PC_Critical[MAX_BUFFER_NUM]實現(xiàn)。程序的實現(xiàn)——數(shù)據(jù)結(jié)構(gòu)6實驗三生產(chǎn)者、消費者問題空緩沖區(qū)作為臨界資源,要設(shè)置信號量empty_semaphore來表示空緩沖區(qū)數(shù)目,指示緩沖區(qū)中是否存在空位置,以便開始生產(chǎn)下一個產(chǎn)品程序的實現(xiàn)——數(shù)據(jù)結(jié)構(gòu)7實驗三生產(chǎn)者、消費者問題將源程序文件PC.cpp和測試用例文件test1.
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度月嫂服務(wù)與母嬰用品配送合同3篇
- 系統(tǒng)工程課程設(shè)計優(yōu)化
- 2024年汽車銷售合同擔(dān)保模板附車輛檢測及評估服務(wù)3篇
- 2024年茶園管理與養(yǎng)護全面合作協(xié)議
- 2024年股權(quán)轉(zhuǎn)移及合作經(jīng)營授權(quán)協(xié)議一
- 2024年礦產(chǎn)資源勘探與開采合同標(biāo)的及礦產(chǎn)質(zhì)量
- 2024年地鐵口商鋪租賃合同規(guī)范文本正范本8篇
- 電氣自動化課程設(shè)計
- 揚州大學(xué)檔案學(xué)課程設(shè)計
- 立交橋項目融資課程設(shè)計
- 新媒體運營工作年終總結(jié)
- 微積分(I)知到智慧樹章節(jié)測試課后答案2024年秋南昌大學(xué)
- 【MOOC】電子技術(shù)-北京科技大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年1月福建省普通高中學(xué)業(yè)水平合格性考試化學(xué)試題(解析版)
- 低空經(jīng)濟的商業(yè)化路徑分析
- 項目年終總結(jié)及明年計劃
- 新外貿(mào)業(yè)務(wù)員年終總結(jié)
- 化工廠設(shè)備安裝施工方案
- 國家電網(wǎng)公司招聘高校畢業(yè)生應(yīng)聘登記表
- 代賬公司會計主管年終總結(jié)
- 創(chuàng)新思維訓(xùn)練學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評論
0/150
提交評論