




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1.1實驗?zāi)繕?biāo)掌握操作系統(tǒng)對進程管理的同步和互斥問題,以經(jīng)典同步問題“生產(chǎn)者和消費者”為例,運用所學(xué)C語言知識,編寫該問題的模擬運行環(huán)境。1.2實驗環(huán)境教學(xué)機房,C語言程序平臺。1.3實驗內(nèi)容及步驟1.了解經(jīng)典同步問題“生產(chǎn)者和消費者”生產(chǎn)者與消費者可以通過一個環(huán)形緩沖池聯(lián)系起來,環(huán)形緩沖池由幾個大小相等的緩沖塊組成,每個緩沖塊容納一個產(chǎn)品。每個生產(chǎn)者可不斷地每次往緩沖池中送一個生產(chǎn)產(chǎn)品,而每個消費者則可不斷地每次從緩沖池中取出一個產(chǎn)品。指針i和指針j分別指出當(dāng)前的第一個空緩沖塊和第一個滿緩沖塊。2.分析和理解(1)既存在合作同步問題,也存在臨界區(qū)互斥問題合作同步:當(dāng)緩沖池全滿時,表示供過于求,生產(chǎn)者必須等待,同時喚醒消費者;當(dāng)緩沖池全空時,表示供不應(yīng)求,消費者應(yīng)等待,同時喚醒生產(chǎn)者?;コ猓壕彌_池顯然是臨界資源,所在生產(chǎn)者與消費都要使用它,而且都要改變它的狀態(tài)。(2)基于環(huán)形緩沖區(qū)的生產(chǎn)者與消費者關(guān)系形式描述:公用信號量mutex:初值為1,用于實現(xiàn)臨界區(qū)互斥生產(chǎn)者私用信號量empty:初值為n,指示空緩沖塊數(shù)目消費者私用信號量full:初值為0,指示滿緩沖塊數(shù)目整型量i和j初值為0,i指示首空緩沖塊序號,j指示首滿緩沖塊序號(3)PV原語varmutex,empty,full:semaphore;i,j:integer;buffer:array[0...n-1]ofitem;i:=j:=1;Procedureproducer;beginwhiletruedobeginproduceaproduct;P(empty);P(mutex);buffer(i):=product;i:=(i+1)modn;V(mutex);V(full);end;end;Procedureconsumer;beginP(full);P(mutex);goods:=buffer(j);j:=(j+1)modn;V(mutex);V(empty);consumeaproduct;end;end;3.用C語言編程搭建“生產(chǎn)者和消費者”經(jīng)典進程通信問題的環(huán)境。要求程序運行時,按任意鍵停止,顯示當(dāng)前系統(tǒng)的各個參數(shù)的值。提交實驗報告,以及相關(guān)程序列表。打包成附件上傳。#include<windows.h>#include<stdio.h>#include<stdlib.h>#defineP(S)WaitForSingleObject(S,INFINITE)//定義Windows下的P操作#defineV(S)ReleaseSemaphore(S,1,NULL)//定義Windows下的V操作#definerate1000#defineCONSUMER_NUM10/*消費者個數(shù)*/#definePRODUCER_NUM10/*生產(chǎn)者個數(shù)*/#defineBUFFER_NUM4/*緩沖區(qū)個數(shù)*/typedefHANDLESemaphore;//信號量的Windows原型char*thing[10]={"物品1","物品2","物品3","物品4","物品5","物品6","物品7","物品8","物品9","物品10"};structBuffer{intproduct[BUFFER_NUM];//緩沖區(qū)intstart,end;//兩個指針}g_buf;Semaphoreg_semBuffer,g_semProduct,g_mutex;//消費者線程DWORDWINAPIConsumer(LPVOIDpara){inti=*(int*)para;//i表示第i個消費者intptr,j;//待消費的內(nèi)容的指針Sleep(100);while(1){P(g_semProduct);//有產(chǎn)品,先鎖住緩沖區(qū)P(g_mutex);//記錄消費的物品ptr=g_buf.start;//再移動緩沖區(qū)指針g_buf.start=(g_buf.start+1)%BUFFER_NUM;V(g_mutex);//讓其他消費者或生產(chǎn)者使用g_bufprintf("消費者%d:消費了buf[%d]里的=%s\n",i,ptr,thing[g_duct[ptr]]);Sleep(rate*rand()%10+110);//消費完畢,并釋放一個緩沖V(g_semBuffer);if(j++>30)break;}getchar();return0;}//生產(chǎn)者線程DWORDWINAPIProducer(LPVOIDpara){inti=*(int*)para-CONSUMER_NUM;intptr;intdata;//產(chǎn)品Sleep(100);while(1){Sleep(rate*rand()%10+110);data=rand()%10;//等待存放空間P(g_semBuffer);//有地方,先鎖住緩沖區(qū)P(g_mutex);//記錄消費的物品ptr=g_buf.end;//再移動緩沖區(qū)指針g_buf.end=(g_buf.end+1)%BUFFER_NUM;//讓其他消費者或生產(chǎn)者使用g_bufV(g_mutex);printf("生產(chǎn)者%d:在buf[%d]里放入了%s\n",i,ptr,thing[data]);g_duct[ptr]=data;Sleep(rate/2*rand()%10+110);//放好了完畢,釋放一個產(chǎn)品V(g_semProduct);}return0;}intmain(intargc,char*argv[]){//線程技術(shù),前面為消費者線程,后面為生產(chǎn)者線程HANDLEhThread[CONSUMER_NUM+PRODUCER_NUM];//線程計數(shù)//srand(time());DWORDtid;inti=0;//初始化信號量g_mutex=CreateSemaphore(NULL,BUFFER_NUM,BUFFER_NUM,"mutexOfConsumerAndProducer");g_semBuffer=CreateSemaphore(NULL,BUFFER_NUM,BUFFER_NUM,"BufferSemaphone");g_semProduct=CreateSemaphore(NULL,0,BUFFER_NUM,"ProductSemaphone");if(!g_semBuffer||!g_semProduct||!g_mutex){printf("CreateSemaphoneError!\n");return-1;}inttotalThreads=CONSUMER_NUM+PRODUCER_NUM;//開啟消費者線程for(i=0;i<CONSUMER_NUM;i++){hThread[i]=CreateThread(NULL,0,Consumer,&i,0,&tid);if(hThread[i])WaitForSingleObject(hThread[i],10);}//開啟生產(chǎn)者線程for(;i<totalThreads;i++){hThread[i]=CreateThread(NULL,0,Producer,&i,0,&tid);if(hThread[i])WaitForSingleObject(hThread[i],10);}//生產(chǎn)者和消費者的執(zhí)行WaitForMultipleObjects(totalThreads,hThread,TRUE,INFINITE);return0;}1.4實驗思考題1.思考在“生產(chǎn)者和消費者”經(jīng)典同步問題中,兩個P操作是否可以互換位置,以及兩個V操作是否可以互換位置。在生產(chǎn)者-消費者問題中,如果將兩個P操作,即P(full)和P(mutex)互換位置,或者P(empty)和P(mutex)互換位置,都可能引起死鎖??紤]系統(tǒng)中緩沖區(qū)全滿時,若以生產(chǎn)者進程先執(zhí)行了P(mutex)操作并獲得成功,當(dāng)再執(zhí)行P(empty)操作時,他將因失敗而進入阻塞狀態(tài),它期待消費者執(zhí)行V(empty)來喚醒自己。在此之前,它不可能執(zhí)行V(mutex)操作,從而使企圖通過P(mutex)進入自己的臨界區(qū)的其他生產(chǎn)者和所有消費者進程全部進入阻塞狀態(tài),從而引起系統(tǒng)死鎖。類似地,消費者進程若先執(zhí)行P(mutex),后執(zhí)行P(full),同樣可能造成死鎖。V(full)和V(mutex)互換位置,或者V(empty)和V(mutex)互換位置,則不會引起死鎖,其影響只是使臨界資源的釋放略微推遲一些。2.思考在“哲學(xué)家就餐”經(jīng)典同步問題中,如何修改程序,可以保證不會發(fā)生死鎖現(xiàn)象。(1)至多只允許有四位哲學(xué)家同時去拿左邊的筷子,最終能保證至少有一位哲學(xué)家能夠進餐,并在用畢是能釋放出他用過的兩只筷子,從而使更多的哲學(xué)家能夠進餐。(2)僅當(dāng)哲學(xué)家的左、右兩只筷子均可使用時,才允許他拿起筷子進餐。(3)規(guī)定奇數(shù)號哲學(xué)家先拿他左邊的筷子,然后再去拿右邊的筷子,而偶數(shù)號哲學(xué)家則相反。按此規(guī)定,將是1、2號哲學(xué)家競爭1號筷子;3、4號哲學(xué)家競爭3號筷子。即五位哲學(xué)家都先競爭奇數(shù)號筷子,獲得后,再去競爭偶數(shù)號筷子,最后總會有一位哲學(xué)家能獲得兩只筷子而進餐。3.思考在“讀者與寫者”經(jīng)典同步問題中,如何修改程序,變?yōu)椤皩懻邇?yōu)先”的算法。(寫者優(yōu)先算法)Varrmutex,wmutex,mutex,s:semaphore=1,1,1,1;Writecount:integer:=0;Reader:beginRepeatWait(s);Wait(rmutex);Ifreadcount=0thenwait(wmutex);Readcount:readcount+1;Signal(rmutex);Signal(s);Performreadoperation;Wait(rmutex);Readcount:=readcount:=readcount-1;Ifreadcount=0thensignal(wmutex);Signal(rmutex);Untilfalse;EndWriter:beginRepeatWait(mutex);Ifwritecount=0thenwait(s);Writecount:writecount+1;Signal(mutex);Wait(wmutex);Performwriteoperatin;Signal(wmutex);Wait(mutex);Writecount=0thensignal(s);Signal(mutex);Untilfalse;end4.分析以下進程運行
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務(wù)管理b卷試題及答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備高級技能考前沖刺模擬試卷A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級技能考試題庫
- 工程熱力學(xué)應(yīng)用測試及答案
- 農(nóng)業(yè)現(xiàn)代化種植標(biāo)準(zhǔn)化體系建設(shè)方案
- 客戶咨詢與需求記錄表
- 傳統(tǒng)文化在初中英語課中深度融入教案
- 儀器設(shè)備使用說明及維護保養(yǎng)指導(dǎo)書
- 美容美發(fā)服務(wù)安全責(zé)任協(xié)議書
- 《小學(xué)數(shù)學(xué)幾何圖形識別與性質(zhì)理解教學(xué)方案》
- 打井工程施工合同范本
- 2025年岳陽職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫1套
- 《采購管理策略》課件
- 《校園安全教育(第二版)》 課件 項目一 走進安全教育;項目二 維護校園治安
- 《教育強國建設(shè)規(guī)劃綱要(2024-2035年)》解讀講座
- 《義務(wù)教育語文課程標(biāo)準(zhǔn)》2022年修訂版原版
- 平面構(gòu)成(普通高等院校藝術(shù)設(shè)計專業(yè))全套教學(xué)課件
- 煙花爆竹危險固體廢棄物綜合利用建設(shè)項目可行性研究報告-甲乙丙資信
- 歡樂的那達慕合唱鋼琴伴奏譜(共5頁)
- 二年級下冊萬以內(nèi)數(shù)的認識復(fù)習(xí)公開課(課堂PPT)
- 重慶市城鎮(zhèn)老舊小區(qū)改造和社區(qū)服務(wù)提升項目管理辦法(試行)
評論
0/150
提交評論