實(shí)驗(yàn)二進(jìn)程線程的同步及互斥_第1頁(yè)
實(shí)驗(yàn)二進(jìn)程線程的同步及互斥_第2頁(yè)
實(shí)驗(yàn)二進(jìn)程線程的同步及互斥_第3頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)二進(jìn)程(線程)的同步與互斥一、實(shí)驗(yàn)?zāi)康?. 拿揮基本的同涉與互斥算法,理解生產(chǎn)者消貴者模塑。2. 學(xué)習(xí)使用Windows中基本的間步對(duì)象,拿捋曲關(guān)API的便用方進(jìn)。3. 了解Windows中馬線棺的并發(fā)執(zhí)行機(jī)制,實(shí)ffiiSf?的同形與互斥。二、實(shí)驗(yàn)容1.實(shí)驗(yàn)容以生嚴(yán)音/消貴者模里為依襦,在windows壞境下創(chuàng)建一個(gè)控斟臺(tái)進(jìn)杈,在iaas + eij2. 實(shí)驗(yàn)要求學(xué)習(xí)并理解生產(chǎn)者/消費(fèi)者模型及其同步/互斥規(guī)劇;學(xué)習(xí)了解Windows同步對(duì)象及貝特性;熟悉實(shí)驗(yàn)壞境,拿摒!關(guān)API的便用方沫;設(shè)it程序,實(shí)現(xiàn)生產(chǎn)者/消IS者進(jìn)程(找程)的同步與互斥;三、相關(guān)API的功能及使用我f fi|用W

2、indows SDK提供的API編程實(shí)現(xiàn)實(shí)驗(yàn)題目要求,而VC中內(nèi)含有Windows SDK 的所有工具和定義。要便用這些API,需要包含堆這些函數(shù)進(jìn)行說(shuō)明的SDK頭文件一最常 見的是Windows.h(特殊的API調(diào)用還需要包含其他頭文件)。下面給出的是本實(shí)騎使用到的API的功能和使用方法簡(jiǎn)單介給。(1)CreateThread «)能一創(chuàng)建一彳、在調(diào)用進(jìn)禪的地址空間中執(zhí)行的找程HANDLE CreateThread( LPSECURITY_ATTRIBUTES IpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE I

3、pStartAddress,LPVOID IpParamiter,DWORD dwCreationFlags, Lpdword IpThread );參數(shù)說(shuō)明IpThreadAttributes指向一 f LPSECURITY_ATTRIBUTES(新線 f?的安全 11 描述符)。 dwStackSize一定義原始堆枝夫小。IpStartAddress指向使用 LPTHRAED_START_ROUTINE 類塑定義的函數(shù)。IpParamiter一定義一個(gè)給進(jìn)程傳遞參敷的指甘。dwCreationFlags定義控制線樣僑建的附加標(biāo)志。IpThread保存線程標(biāo)志符(32位)(2) Create

4、 Mutex功能一eiit-tfeg或匿名的互斥量對(duì)象 KSHANDLE CreateMutex(LPSECURITY_ATTRIBUTES IpMutexAttributes,BOOL blnitialOwner,LPCTSTR IpName);參數(shù)說(shuō)明IpMutexAttributes必須取值 NULL。blnitialOwner一指示當(dāng)前我程是否馬上擁有該互斥量(即馬上UH議)。IpName互斥量名禰。(3) CreateSemaphore【力能一eut-tfeg或借名的信號(hào)量對(duì)象 KSHANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES IpSema

5、phoreAttributes,LONG IlnitialCount,LONG IMaximumCount,LPCTSTR IpName);參數(shù)說(shuō)明IpSemaphoreAttributes必須取值 NULLOIlnitialCountf|號(hào)量的初始值。該值大于等于0,但爪于等于IMaximumCount指定的量大值。IMaximumCount(|號(hào)量的最大值。IpName信號(hào)量名禰。(4) WaitForSingleObject 能一便f?序處于等諱狀態(tài),IS fl號(hào)量hHandle 規(guī)(即貝IS大于0)或超過規(guī)定 的等詩(shī)時(shí)冋DWORD WaitForSingleObject(HANDLE

6、hHandle, DWORD dwMilliseconds);參數(shù)說(shuō)明hHandle信號(hào)量常針。dwMilliseconds等待的最長(zhǎng)時(shí)Ifl (INFINITE為無(wú)限等侍)。(5) Releasesemaphore【力能一對(duì)常定信號(hào)量加上一個(gè)常定大小的量。成功執(zhí)RWiSB非0値 KSBOOL ReleaseSemaphore(HANDLE hSemaphore,LONG IReleaseCount,LPLONG IppreviousCount);參數(shù)說(shuō)明hSemaphore號(hào)量指什。IReleaseCount信號(hào)量的增量。IppreviousCount保存信號(hào)量當(dāng)前值。(6) Release

7、Mutex【力能一扌I開互斥», R0IE互斥量加1。成ID碉用呱返回0格式BOOL ReleaseMutex(HANDLE hMutex);參數(shù)說(shuō)明hMutex互斥量 IHfo0K示例程序/定義一個(gè)結(jié)構(gòu)體用干存儲(chǔ)裁樣的信息struct Threadinfol int serial;線f?號(hào)char entity; double delay;線程類別(生產(chǎn)者或消皺者)等待時(shí)間double persist; /ft 作時(shí)同;/生產(chǎn)者void Producer(void *p)定艾變量用于存昭當(dāng)前線棺的信息DWORD m_delay;DWORD m_persist;int m.seria

8、l;/u參數(shù)中菇得信息m_serial=(Threadlnfo*)(p)->serial;m_delay=(DWORD)(Threadlnfo*)(p)->delay *INTE_PER_SEC);m_persist=(DWORD)(Threadlnfo*)(p)->persist *INTE_PER_SEC);while( running)/p a 作 cout«H生嚴(yán)者裁樣,«m_serial«,靖求生產(chǎn).M«endl;WaitForSingleObject(g_hEmptySemaphoreJNFINITE);cout«

9、H生產(chǎn)者找程"«m_serial«*請(qǐng)求獨(dú)占緩沖區(qū)/«endl;WaitForSingleObject(g_hMutex,INFINITE);Sleep(m_delay); if 遲等待/生產(chǎn)一個(gè)產(chǎn)品cout«M生產(chǎn)者找程"«m_serial«* 生產(chǎn) e«+ProductlD «* 號(hào)嚴(yán)品成功«endl;cout«M 生產(chǎn)者線程,«m_serial«"請(qǐng)求増產(chǎn)品,«ProductlD«H 15 人緩沖區(qū)."

10、1;endl; 把新生產(chǎn)的產(chǎn)品朋人緩沖區(qū)g_bufferin = ProductID;in = (in+1)%SIZE_0F_BU 阡 ER;Sleep(m_persist); /# 作等侍cout«"生產(chǎn)者玻程"«m_serial«"將產(chǎn)品"<<ProductlD<<投入緩沖區(qū)中成 JV«endl;輸岀緩沖區(qū)當(dāng)前的狀態(tài)m m m «endl«*n當(dāng)前緩沖區(qū)侑況如圖(代表巳有產(chǎn)品,代表沒有產(chǎn)品):*«endl;for (inti = 0;i<10;i+)i

11、f( g_bufferi>0 ) cout«*'B-;else coutvv口:Icout«Ann m m m " I mrr«endl;/V»ftReleaseMutex(g_hMutex);ReleaseSemaphorefg.hFullSemaphoreJULL);消ft者void Consumer(void *p) DWORD m_delay;DWORD m_persist;int m.serial;/卩、參數(shù)中獲得信息m_serial=(Threadlnfo*)(p)->serial;m_delay=(DWORD)

12、(Threadlnfo*)(p)->delay *INTE_PER_SEC); m_persist=(DWORD)(Threadlnfo*)(p)->persist JNTE_PER_SEC);while( running )/p» 作cout<<"消般者線樣"«m_serial«, ifi 求消 8."«endl;WaitForSingleObject(g_hFullSemaphoreJNFINITE);cout«"消敬者線程"«m_serial«,

13、請(qǐng)求獨(dú)占緩沖區(qū)?«endl;WaitForSingleObject(g_hMutexJNFINITE);Sleep(m_delay);/M 遲等待從緩沖區(qū)中取出一丫產(chǎn)品cout«M消熨者線程,«m_serial«,ConsumelD = g_bufferout; g_bufferout=0; out=(out+1)%SIZE_OF_BU 阡ER; cout«"消敬者線程"«m_serial«, /消耗一個(gè)產(chǎn)品cout«"消敬者踐程"«m_serial«*

14、Sleep(m_persist);cout«"消徹者線程"«m_serial«*輸出緩沖區(qū)當(dāng)前的狀態(tài)<<n當(dāng)前緩沖區(qū)情況咖圖: for ( int i=0;i<10;i+) if(g_bufferi>O)co W;else cout«B0M;cout«Ann i m m請(qǐng)求取出一個(gè)嚴(yán)ffl.H«endl;取出產(chǎn)品 幺ConsumelDd 成功vvendl; 開始消眾消皺嚴(yán)品"«ConsumelD«"."«endl;消貴產(chǎn)品 *<

15、;ConsumelD«f fit ft?«endl;*w,«endl-«endl;*nM«endl;/V » 作ReleaseMutex(g_hMutex);ReleaseSemaphore(g_hEmptySemaphore,1,NULL);XXXXXXXMXXMXXXXMXXMXXXXXXXXXXXXXXXXMXXMXMMXXXXMXXMXXMXXM區(qū)國(guó)5r一9 翔彳49費(fèi)49 -8-丄消1 產(chǎn)產(chǎn)占富0蚩亠品 生蟲獨(dú)黑逍嚴(yán) 77273333呈口王【圣L1王呈呈口王呈 走免爭(zhēng)八S支蘢 丄二纟V*M=/?纟了-4二4F纟小 嚴(yán)產(chǎn)熒嚴(yán)墓

16、®賽 生生 消消區(qū)遜豁翻嚴(yán)已有產(chǎn)臥口“產(chǎn)站功人. 成按 1 產(chǎn)15 號(hào)品 費(fèi)歲 肖1占 稻產(chǎn)券 344產(chǎn)產(chǎn)占占出層品7XXXXXXXMXXXXMMXMXXMXXMXXMXMX臺(tái)152號(hào)產(chǎn)品威功悼魚鄭鐸2請(qǐng)壟消臥年嚴(yán)看線程庫(kù)產(chǎn)者繩呈 隹產(chǎn)肴編呈訊區(qū).1506.消費(fèi)產(chǎn)蠹遼0150 FZ坊.U王Q王呈呈王呈Q王呈 鄉(xiāng)戔主也半八去夷戔 -4=-4?SK (丄 r2b-4二-4?纟小 #|1肴者#|1 產(chǎn)嚴(yán)費(fèi)產(chǎn)曲f.»賽 主目?jī)行ば?VI 勻; mr區(qū)區(qū) -.B 產(chǎn)產(chǎn)占占 生壷獨(dú) H 1®請(qǐng)耆 者 產(chǎn)產(chǎn)菽產(chǎn).S 功人中 成齧< 口1A * 產(chǎn)16投" 號(hào)品6

17、1F<< d d do QH三0王0三E 紗線&二 a富者卄 費(fèi)產(chǎn)產(chǎn)產(chǎn)"口壬呈口王呈穴、實(shí)驗(yàn)結(jié)果分折K記錄生產(chǎn)者和消賈者的同步執(zhí)fiiiS線程號(hào)裁程類別麗遲時(shí)同操作時(shí)間操作球來(lái)媛沖區(qū)靖來(lái)生產(chǎn)(消賈)結(jié)果1P12請(qǐng)求生產(chǎn)請(qǐng)求獨(dú)占(在2«)生產(chǎn)成助2P26請(qǐng)求生產(chǎn)占未生嚴(yán)3C45請(qǐng)求消賈無(wú)未消皺4C56請(qǐng)求消費(fèi)無(wú)未消眾5C32無(wú)未消皺2、分林Producer函數(shù)和Consumer函斂的功能,并畫出對(duì)應(yīng)的程序渝程圖。Producer函數(shù):通過用變量提取保存提取當(dāng)南険澹信息,然后列斷是否執(zhí)行,接著發(fā)出生嚴(yán) 請(qǐng)求,i青求通過后腴占緩沖區(qū)資海,接著生產(chǎn)一個(gè)產(chǎn)品投人緩沖區(qū),成血后釋笊所占緩沖區(qū)資 海,到此此函數(shù)執(zhí)Consumer函數(shù):也是通過用變量提取保存提取當(dāng)前資澹信息,然后判斷是否執(zhí)行,接著發(fā)岀

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論