版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《進(jìn)程同步與互斥》試驗(yàn)匯報(bào)試驗(yàn)序號(hào):01試驗(yàn)項(xiàng)目名稱:進(jìn)程同步與互斥試驗(yàn)地點(diǎn)指導(dǎo)教師時(shí)間1、掌握基本的進(jìn)程同步與互斥算法,理解生產(chǎn)者-消費(fèi)者問(wèn)題。2、學(xué)習(xí)使用Windows/XP中基本的同步對(duì)象,掌握有關(guān)API的使用措施。3、理解Windows/XP中多線程的并發(fā)執(zhí)行機(jī)制,實(shí)現(xiàn)進(jìn)程的同步與互斥。4、設(shè)計(jì)程序,實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者進(jìn)程(線程)的同步與互斥;Windows/XP+VisualC++以生產(chǎn)者-消費(fèi)者模型為根據(jù),在Windows/XP環(huán)境下創(chuàng)立一種控制臺(tái)進(jìn)程,在該進(jìn)程中創(chuàng)立n個(gè)線程模擬生產(chǎn)者和消費(fèi)者,實(shí)現(xiàn)進(jìn)程(線程)的同步與互斥。生產(chǎn)者進(jìn)程的功能:生產(chǎn)東西,供消費(fèi)者消費(fèi);消費(fèi)者進(jìn)程的功能:消費(fèi)生產(chǎn)者生產(chǎn)的東西。生產(chǎn)者生產(chǎn)產(chǎn)品并存入緩沖區(qū)供消費(fèi)者取走使用,消費(fèi)者從緩沖器內(nèi)取出產(chǎn)品去消費(fèi)。在生產(chǎn)者和消費(fèi)者同步工作時(shí),必須嚴(yán)禁生產(chǎn)者將產(chǎn)品放入已裝滿的緩沖器//定義某些常量;//本程序容許的最大臨界區(qū)數(shù);//秒到微秒的乘法因子;//本程序容許的生產(chǎn)和消費(fèi)線程的總數(shù);#defineMAX_THREAD_NU//定義一種構(gòu)造,記錄在測(cè)試文獻(xiàn)中指定{intthread_request[M//臨界區(qū)對(duì)象的申明,用于管理緩沖區(qū)的互斥訪問(wèn);CRITICAL_SECTIONPC_Critical[MAX_BUFFER_NUM];intBuffer_Critical[MAX_BUFFER_NUM];//緩沖區(qū)申明,用于寄存產(chǎn)品;HANDLEh_Thread[MAX_THREAD_NUM];//用于存儲(chǔ)每個(gè)線程句柄的數(shù)組;ThreadInfoThread_Info[MAX_THREA//線程信息數(shù)組;//一種信號(hào)量;//一種互斥量;//實(shí)際的線程的數(shù)目;{//申明所需變量;//初始化緩沖區(qū);for(inti=0;i<MAX_BUFFER_NUM;i++)//初始化每個(gè)線程的祈求隊(duì)列;for(intj=0;j<MAX_THREAD_NUM;j++){for(intk=0;k<MAX_THREAD_NUM;k++)Thread_Info[j].thread_reqThread_Info[j].n_request//初始化臨界區(qū);for(i=0;i<MAX_BUFFER_NUM;i++)//打開(kāi)輸入文獻(xiàn),按照規(guī)定的格式提取線程等信息;//從文獻(xiàn)中獲得實(shí)際的緩沖區(qū)的數(shù)目;printf("輸入文獻(xiàn)是:\n");//回顯獲得的緩沖區(qū)的數(shù)目信息;//提取每個(gè)線程的信息到對(duì)應(yīng)數(shù)據(jù)構(gòu)造中;while(c!='\n'&&!in()Thread_Info[n_Thread].thread_request[Thread_Info[n_Thread].n_req}//回顯獲得的線程信息,便于確認(rèn)對(duì)的性;intTemp_request=Thread_Info[j].n_request;for(intk=0;k<Temp_requesprintf("%d",Thread_Info[j].thread_request[k]empty_semaphore=CreateSemaphore(NULL,n_Buffer_or_Critical,h_mutex=CreateMutex(NULL,FALSE,"mutex_for_ustd::stringlp="semaphore_for_produce_";h_Semaphore[j+1]=CreateSemaphore(NULL,0,n_Thread,lp.cif(Thread_Info[i].entity=='P')h_Thread[i]=CreateThread(NULL,0,(Lwait_for_all=WaitForMultipleObjects(n_Thread,h_Thread,TRUE,-1);printf("\n\nALLProducerandconsumerhavefinishedtheprintf("Pressanykey_getch();boolIfInOtherRequest(intr{for(intj=0;j<Thread_Info[i].n_request;j++)if(Thread_Info[i].thread_reque//找出目前可以進(jìn)行產(chǎn)品生產(chǎn)的空緩沖區(qū)位置;for(inti=0;i<n_Buffer_or_Crit//用下面這個(gè)特殊值表達(dá)本緩沖區(qū)正處在被寫狀態(tài);returnEmptyPosition;//找出目前所需生產(chǎn)者生產(chǎn)的產(chǎn)品的位置;{if(Buffer_Critical[}}//生產(chǎn)者進(jìn)程DWORDwait_for_semaphore,wait_for_mutm_serial=((ThreadInfo*)(p))->serial;m_delay=(DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);printf("Producer%2dsendstheproducerequire.\n",m_serial);//確認(rèn)有空緩沖區(qū)可供生產(chǎn),同步將空位置數(shù)empty減1;用于生產(chǎn)者和消費(fèi)者的同步;wait_for_semaphore=WaitForSingleObject(empty_semaphore,-1);wait_for_mutex=WaitForSingleObject(h_mutexintProducePos=FindProducePosition();//關(guān)鍵生產(chǎn)環(huán)節(jié)中,程序?qū)⑸a(chǎn)者的ID作為產(chǎn)品編號(hào)放入,以便消費(fèi)者識(shí)別;printf("Producer%2position%2d.\n",m_serial,PBuffer_Critical[ProducePos]=mprintf("Producer%2dfinishproducing:\n",m_serial);printf("position[%2d]:%3d\n",ProducePos,Buffer_Critical[ProducePos]);ReleaseSemaphore(h_Semaphore[m_serial],n_Thr}voidConsume(void*p){DWORDwait_for_semaphore,m_dm_serial=((ThreadInfo*)(pm_delay=(DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);m_requestNum=((ThreadInfo*)m_thread_request[i]=((ThreadInfo*)(p))->thread_requfor(i=0;i<m_requestNum;i++){//祈求消費(fèi)下一種產(chǎn)品product\n",m_serial,m_thread_request[//假如對(duì)應(yīng)生產(chǎn)者沒(méi)有生產(chǎn),則等待;假如生產(chǎn)了,容許的消費(fèi)者數(shù)目-1;實(shí)現(xiàn)了讀wait_for_semaphore=WaitForSingleObject(h_Semaphore[m_thread_requestintBufferPos=FindBufferPosition(m_thread_request[i]);//進(jìn)入臨界區(qū)后執(zhí)行消費(fèi)動(dòng)作;并在完畢本次祈求后,告知此外//經(jīng)滿足;同步假如對(duì)應(yīng)的產(chǎn)品使用完畢,就做對(duì)應(yīng)處理;并給//示;該對(duì)應(yīng)處理指將對(duì)應(yīng)緩沖區(qū)清空,并增長(zhǎng)代表空緩沖區(qū)的信號(hào)量;EnterCriticalSection(&PC_Critical[Buffeprintf("Consumer%2dbegintoconsume%2dif(!IfInOtherRequesBuffer_Critical[BufferPos]=-1;//標(biāo)識(shí)緩沖區(qū)為空;\n",BufferPos,Buffer_CritReleaseSemaphore(empty_semaphore,}printf("Consumer%2dfinishconsumingpr}LeaveCriticalSection(&PC_Critical[Buff渝入文件是:D:大二下課件操作系統(tǒng)原理\實(shí)險(xiǎn)現(xiàn)作系統(tǒng)實(shí)threadthread2P
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年新版中國(guó)簿膜平衡眼壓計(jì)項(xiàng)目可行性研究報(bào)告
- 2024-2030年新版中國(guó)液化氣卡盤項(xiàng)目可行性研究報(bào)告
- 2024-2030年新版中國(guó)地?zé)峁懿捻?xiàng)目可行性研究報(bào)告
- 2024-2030年撰寫:中國(guó)微生態(tài)類產(chǎn)品項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2024-2030年撰寫:中國(guó)塑料方格填料項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2024-2030年吹瓶氣體回收系統(tǒng)公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 幼兒空氣課程設(shè)計(jì)背景
- 2024-2030年布洛芬緩釋片公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年威利寧公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年噴霧通風(fēng)玻璃鋼冷卻塔搬遷改造項(xiàng)目可行性研究報(bào)告
- 加油站-課程設(shè)計(jì)
- 帛書(shū)老子道德經(jīng)全文-校注
- 柑橘園的規(guī)劃與設(shè)計(jì)(趙錚)
- 國(guó)家開(kāi)放大學(xué)電大《中文學(xué)科論文寫作》期末題庫(kù)及答案
- 提高地下車庫(kù)防水質(zhì)量QC成果
- 物業(yè)消防系統(tǒng)承接查驗(yàn)表
- 俄羅斯聯(lián)邦政府第782號(hào)決議 電梯安全技術(shù)規(guī)程(2009版)
- OPERA系統(tǒng)培訓(xùn)ppt課件
- 110Kv輸變電工程電氣安裝技術(shù)交底
- ASTM_A29/A29M熱鍛及冷加工碳素鋼和合金鋼棒
- 錄屏軟件Camtasia_Studio使用教程
評(píng)論
0/150
提交評(píng)論