版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題2012-04實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題實(shí)驗(yàn)?zāi)康模赫莆栈镜耐交コ馑惴ǎ斫馍a(chǎn)者和消費(fèi)者模型。了解Windows2000/XP中多線程的并發(fā)執(zhí)行機(jī)制,線程間的同步和互斥。學(xué)習(xí)使用Windows2000/XP中基本的同步對象,掌握相應(yīng)的API實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題課件的內(nèi)容組織:(一)相關(guān)基礎(chǔ)知識
1、進(jìn)程同步
2、同步對象
3、生產(chǎn)消費(fèi)者模型 模型特點(diǎn)(緩沖池、生產(chǎn)和消費(fèi)的規(guī)則、測試用例)實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題課件的內(nèi)容組織:(二)程序的實(shí)現(xiàn): 1、實(shí)驗(yàn)環(huán)境 2、相關(guān)API:有關(guān)操縱同步對象API實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題程序的結(jié)構(gòu).函數(shù): 一個(gè)主函數(shù)、 兩個(gè)模擬(生產(chǎn)、消費(fèi))函數(shù)、 三個(gè)輔助函數(shù).數(shù)據(jù)結(jié)構(gòu):
產(chǎn)品緩沖區(qū)、 線程信息、 同步對象(寫寫互斥:互斥量;讀寫同步:信號量;讀互斥:臨界區(qū);臨界資源:信號量)實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題相關(guān)基礎(chǔ)知識——進(jìn)程同步1
進(jìn)程同步:為避免OS在多道程序環(huán)境下由于進(jìn)程的異步性給系統(tǒng)造成混亂引入同步機(jī)制。其主要任務(wù)是使并發(fā)執(zhí)行的進(jìn)程(含線程)之間能有效地共享資源和相互合作。實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題進(jìn)程相互間的制約關(guān)系:◆間接相互制約:源于各進(jìn)程對臨界資源的訪問,用互斥方式協(xié)調(diào)進(jìn)程◆直接相互制約:源于進(jìn)程間為共同完成任務(wù)的相互合作,用同步方式協(xié)調(diào)進(jìn)程
相關(guān)基礎(chǔ)知識——進(jìn)程同步2實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題
同步對象:是指Windows用來實(shí)現(xiàn)同步和互斥的實(shí)體。下面是常見的同步對象:信號量(Semaphore)、互斥量(Mutex)、臨界段(CriticalSection)事件(Event)等。相關(guān)基礎(chǔ)知識——同步對象1實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題同步對象的使用:①創(chuàng)建或者初始化;②請求該同步對象,隨即進(jìn)入臨界區(qū),這一步對應(yīng)于互斥量的上鎖;③釋放該同步對象,這一步對應(yīng)于互斥量的解鎖。相關(guān)基礎(chǔ)知識——同步對象2實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題通常這些對象是全局的,或者對相關(guān)進(jìn)程(或線程)來說是全局的,所以可以在一個(gè)進(jìn)程中創(chuàng)建的同步對象,在其他線程中都可以使用,從而實(shí)現(xiàn)了同步互斥?;コ饬俊⑿盘柫?、事件可以跨線程甚至跨進(jìn)程使用以實(shí)現(xiàn)同步。相關(guān)基礎(chǔ)知識——同步對象3實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題模型特點(diǎn):
主進(jìn)程中創(chuàng)建n個(gè)線程來模擬生產(chǎn)者或者消費(fèi)者。生產(chǎn)者生產(chǎn)產(chǎn)品,消費(fèi)者只消費(fèi)指定生產(chǎn)者的產(chǎn)品。相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型1實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題緩沖池(本實(shí)驗(yàn)是數(shù)組)代表產(chǎn)品,緩沖池的不同值代表產(chǎn)品的狀態(tài): -1:空閑; -2:被寫狀態(tài); 其他值(大于0):可消費(fèi)的產(chǎn)品編號(以生成者的線程編號表示)相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型2實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題緩沖池不是環(huán)形循環(huán)的,也不要求按順序訪問。生產(chǎn)者可以把產(chǎn)品放到目前某一個(gè)空緩沖區(qū)中。
共享緩沖區(qū)作為空閑空間的條件:共享緩沖區(qū)的數(shù)據(jù)滿足了所有關(guān)于它的消費(fèi)需求,此時(shí)該空閑空間允許新的生產(chǎn)者使用。相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型3實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題為生產(chǎn)者分配緩沖區(qū)時(shí)各生產(chǎn)者間必須互斥,此后各個(gè)生產(chǎn)者的具體生產(chǎn)活動(dòng)可以并發(fā)。
消費(fèi)者之間只有在對同一產(chǎn)品進(jìn)行消費(fèi)時(shí)才需要互斥,同時(shí)在消費(fèi)過程結(jié)束時(shí)需要判斷該消費(fèi)對象是否已經(jīng)消費(fèi)完畢并清除該產(chǎn)品。相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型4實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題線程信息的結(jié)構(gòu):線程信息寫入“測試用例文件”(為一個(gè)文本文件)中,格式和含義如下: 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)消費(fèi)者模型5緩沖區(qū)數(shù)量線程號P:生產(chǎn)者,C:消費(fèi)者線程開始生產(chǎn)、消費(fèi)前的休眠時(shí)間消費(fèi)產(chǎn)品所對應(yīng)生產(chǎn)者的線程號實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題第一行說明程序中設(shè)置幾個(gè)緩沖區(qū),其余每行分別描述了一個(gè)生產(chǎn)者或者消費(fèi)者線程的信息。
每一行的各字段間用Tab鍵隔開。不管是消費(fèi)者還是生產(chǎn)者,都有一個(gè)對應(yīng)的線程號,即每一行開始字段那個(gè)整數(shù)。相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型6實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題第二個(gè)字段用字母P或者C區(qū)分是生產(chǎn)者還是消費(fèi)者。第三個(gè)字段表示在進(jìn)入相應(yīng)線程后,在進(jìn)行生產(chǎn)和消費(fèi)動(dòng)作前的休眠時(shí)間,以秒計(jì)時(shí);通過調(diào)整這一列參數(shù),控制開始進(jìn)行生產(chǎn)和消費(fèi)動(dòng)作的時(shí)間。相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型7實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題如果是代表生產(chǎn)者,則該行只有三個(gè)字段。如果代表消費(fèi)者,則該行后邊還有若干字段,代表要求消費(fèi)的產(chǎn)品所對應(yīng)的生產(chǎn)者的線程號。
生產(chǎn)和消費(fèi)的規(guī)則: ◆共享緩沖區(qū)存在空閑空間時(shí),生產(chǎn)者即可使用共享緩沖區(qū)。相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型8實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題◆某一生產(chǎn)者生產(chǎn)一個(gè)產(chǎn)品后,可能不止一個(gè)消費(fèi)者,或者一個(gè)消費(fèi)者多次地請求消費(fèi)該產(chǎn)品。此時(shí),只有當(dāng)所有的消費(fèi)需求都被滿足以后,該產(chǎn)品所在的共享緩沖區(qū)才可以被釋放,并作為空閑空間允許新的生產(chǎn)者使用。相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型9實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題◆每個(gè)消費(fèi)者線程的各個(gè)消費(fèi)需求之間存在嚴(yán)格的先后順序。 如
“5C3124”,可知這代表一個(gè)消費(fèi)線程,該線程請求消費(fèi)順序嚴(yán)格為1、2、4號生產(chǎn)者線程生產(chǎn)的產(chǎn)品。相關(guān)基礎(chǔ)知識——生產(chǎn)消費(fèi)者模型10實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題WindowsXP+VC++6.0利用WindowsSDK提供的系統(tǒng)接口(API,應(yīng)用程序接口)完成程序的功能。API是操作系統(tǒng)提供的用來進(jìn)行應(yīng)用程序設(shè)計(jì)的系統(tǒng)功能接口。使用API,需要包含對API函數(shù)進(jìn)行說明的SDK頭文件,最常見的就是windows.h程序的實(shí)現(xiàn)——實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題
CreateThread功能:創(chuàng)建一個(gè)線程,該線程在調(diào)用進(jìn)程的地址空間中執(zhí)行。格式:HANDLECreateThread( LPSECURITY_ATTRIBUTESlpThreadAttributes, DWORDdwStackSize,
LPTHREAD_START_ROUTINElpStartAddress, LPVOIDlpparamiter, DWORDdwCreationFlags, LPDWORDlpThreadId);參數(shù):lpStartAddress:函數(shù)指針,新創(chuàng)建的線程要執(zhí)行該函數(shù)。程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹1實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題
CreateMutex功能:產(chǎn)生一個(gè)命名的或者匿名的互斥量對象。WaitForSingleObject(對應(yīng)p操作)鎖上互斥鎖,ReleaseMutex(對應(yīng)v操作)打開互斥鎖格式:
HANDLECreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOLbInitialOwner, LPCTSTRlpName);
程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹2實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題CreateSemaphore功能:創(chuàng)建一個(gè)命名的或者匿名的信號量對象。信號量可以看作是在互斥量上的一個(gè)擴(kuò)展。格式:HANDLECreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONGlInitialCount, LONGlMaximumCount, LPCTSTRlpName);程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹3實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題
WaitForSingleObject功能:使程序處于等待狀態(tài),直到信號量(或互斥量)hHandle出現(xiàn)或者超過規(guī)定的等待最長時(shí)間,信號量出現(xiàn)指信號量大于或等于1,互斥量出現(xiàn)指打開互斥鎖。在該函數(shù)返回之前將信號量減1或者鎖上互斥鎖。格式: DWORDWaitForSingleObject( HANDLEhHandle, DWORDdwMilliseconds);
程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹4實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題ReleaseSemaphore功能:將所指信號量加上指定大小的一個(gè)量,執(zhí)行成功,則返回非0值。格式: BOOLReleaseSemaphore( HANDLEhSemaphore, LONGlReleaseCount, LPLONGlpPreviousCount);程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹5實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題
ReleaseMutex功能:用來打開互斥量,即將互斥量加1。成功調(diào)用則返回0。格式: BOOLReleaseMutex( HANDLEhMutex//互斥量指針);
程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹6實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題
InitializeCriticalSection
功能:該函數(shù)初始化臨界區(qū)對象。格式:VOIDInitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);參數(shù)說明lpCriticalSection:指向臨界區(qū)對象的指針程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹7實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題EnterCriticalSection功能:該函數(shù)用于等待指定臨界區(qū)對象的所有權(quán)。當(dāng)調(diào)用線程被賦予所有權(quán)時(shí),該函數(shù)返回。格式:VOIDEnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection);參數(shù)說明 lpCriticalSection:指向臨界區(qū)對象的指針。
程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹8實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題LeaveCriticalSection功能:該函數(shù)釋放指定的臨界區(qū)對象的所有權(quán)。格式:VOIDLeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection);參數(shù)說明 lpCriticalSection:指向臨界區(qū)對象的指針。程序的實(shí)現(xiàn)—相關(guān)API函數(shù)的介紹9實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題一個(gè)主函數(shù):初始化緩沖區(qū)和各個(gè)同步對象并完成線程信息的讀入和記錄,最后根據(jù)該組線程記錄啟動(dòng)模擬線程,并等待所有線程的運(yùn)動(dòng)結(jié)束后退出整個(gè)程序。程序的實(shí)現(xiàn)——程序的結(jié)構(gòu)1實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題
程序的實(shí)現(xiàn)——程序的結(jié)構(gòu)2用于模擬消費(fèi)和生產(chǎn)者的兩個(gè)函數(shù):運(yùn)行于相應(yīng)線程中完成對緩沖區(qū)的讀寫動(dòng)作,生產(chǎn)者和消費(fèi)者線程之間通過同步對象的使用實(shí)現(xiàn)了生產(chǎn)和消費(fèi)動(dòng)作的同步與互斥,是本實(shí)驗(yàn)的核心所在。實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題三個(gè)輔助函數(shù): FindProducePosition:找出當(dāng)前可以進(jìn)行產(chǎn)品生產(chǎn)的空緩沖區(qū)位置 FindBufferPosition:找出當(dāng)前所需生產(chǎn)者生產(chǎn)的產(chǎn)品位置 IfInOtherRequest:確認(rèn)是否還有對同一產(chǎn)品的消費(fèi)請求未執(zhí)行程序的流程圖如下圖所示。程序的實(shí)現(xiàn)——程序的結(jié)構(gòu)3實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題主函數(shù)實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題生產(chǎn)者線程實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題消費(fèi)者線程實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題分析生產(chǎn)消費(fèi)模型及程序結(jié)構(gòu),定義如下數(shù)據(jù)結(jié)構(gòu):用一個(gè)整型數(shù)組Buffer_Critical來代表緩沖區(qū)。生產(chǎn)產(chǎn)品、消費(fèi)產(chǎn)品都需要訪問該組緩沖區(qū)。程序的實(shí)現(xiàn)——數(shù)據(jù)結(jié)構(gòu)1實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題自定義結(jié)構(gòu)體ThreadInfo記錄一條線程的信息,即將測試用例文件中的一行信息記錄下來,用于程序創(chuàng)建相應(yīng)的生產(chǎn)者或者消費(fèi)者ThreadInfo結(jié)構(gòu)類型的數(shù)組Thread_Info存放多個(gè)線程信息。程序的實(shí)現(xiàn)——數(shù)據(jù)結(jié)構(gòu)2實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題structThreadInfo{ int serial; //線程序列號 char entity; //是P還是C doubledelay; //線程延遲時(shí)間 int thread_request[MAX_THREAD_NUM]; //線程請求隊(duì)列 int n_request; //請求個(gè)數(shù)};
程序的實(shí)現(xiàn)——數(shù)據(jù)結(jié)構(gòu)3實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題
實(shí)驗(yàn)用到的同步對象:生產(chǎn)者之間的寫寫互斥:定義互斥量h_mutex,使生產(chǎn)者互斥訪問下一個(gè)可用于生產(chǎn)的空臨界區(qū)。
程序的實(shí)現(xiàn)——數(shù)據(jù)結(jié)構(gòu)4實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題消費(fèi)者和生產(chǎn)者之間的讀寫同步:每一個(gè)生產(chǎn)者用一個(gè)信號量與其消費(fèi)者同步,通過設(shè)置h_Semaphore[MAX_THREAD_NUM]信號量數(shù)組實(shí)現(xiàn),該組信號量用于表示相應(yīng)產(chǎn)品已生產(chǎn)。程序的實(shí)現(xiàn)——數(shù)據(jù)結(jié)構(gòu)5實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題消費(fèi)者之間的讀互斥:每一個(gè)緩沖區(qū)用一個(gè)同步對象實(shí)現(xiàn)該緩沖區(qū)上消費(fèi)者之間的互斥,這通過設(shè)置臨界區(qū)對象數(shù)組PC_Critical[MAX_BUFFER_NUM]實(shí)現(xiàn)。程序的實(shí)現(xiàn)——數(shù)據(jù)結(jié)構(gòu)6實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題空緩沖區(qū)作為臨界資源,要設(shè)置信號量empty_semaphore來表示空緩沖區(qū)數(shù)目,指示緩沖區(qū)中是否存在空位置,以便開始生產(chǎn)下一個(gè)產(chǎn)品程序的實(shí)現(xiàn)——數(shù)據(jù)結(jié)構(gòu)7實(shí)驗(yàn)三生產(chǎn)者、消費(fèi)者問題將源程序文件PC.cpp和測試用例文件test1.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)合集員工管理篇
- 單位管理制度呈現(xiàn)大合集人員管理篇
- 工作轉(zhuǎn)正自我鑒定4篇
- 3D打印在計(jì)算機(jī)維修中的創(chuàng)新應(yīng)用
- 《用色彩畫心情》課件
- 第3單元+中國特色社會(huì)主義道路
- 物流行業(yè)顧問工作總結(jié)
- 乒乓球比賽的作文匯編10篇
- 輸液室護(hù)士的職責(zé)概述
- 游樂園前臺服務(wù)感悟
- 【9歷期末】安徽省合肥市包河區(qū)智育聯(lián)盟2023-2024學(xué)年九年級上學(xué)期1月期末歷史試題
- 2024年度專業(yè)外語培訓(xùn)機(jī)構(gòu)兼職外教聘任合同3篇
- 個(gè)人的車位租賃合同范文-個(gè)人車位租賃合同簡單版
- 2025-2025學(xué)年小學(xué)數(shù)學(xué)教研組工作計(jì)劃
- 水族館改造合同
- 湖南省益陽市2022-2023學(xué)年高三上學(xué)期數(shù)學(xué)期末試卷
- 【MOOC】教學(xué)研究的數(shù)據(jù)處理與工具應(yīng)用-愛課程 中國大學(xué)慕課MOOC答案
- 《小學(xué)科學(xué)實(shí)驗(yàn)創(chuàng)新》課件
- 拌合站安全事故案例
- 《紅色家書》讀書分享會(huì)主題班會(huì)課件
- 2025年廣東省春季高考數(shù)學(xué)仿真模擬試卷試題(含答案解析+答題卡)
評論
0/150
提交評論