![操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)-讀者寫(xiě)者問(wèn)題_第1頁(yè)](http://file4.renrendoc.com/view11/M00/38/1A/wKhkGWWvCPOAaurUAADi6ghbk1U632.jpg)
![操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)-讀者寫(xiě)者問(wèn)題_第2頁(yè)](http://file4.renrendoc.com/view11/M00/38/1A/wKhkGWWvCPOAaurUAADi6ghbk1U6322.jpg)
![操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)-讀者寫(xiě)者問(wèn)題_第3頁(yè)](http://file4.renrendoc.com/view11/M00/38/1A/wKhkGWWvCPOAaurUAADi6ghbk1U6323.jpg)
![操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)-讀者寫(xiě)者問(wèn)題_第4頁(yè)](http://file4.renrendoc.com/view11/M00/38/1A/wKhkGWWvCPOAaurUAADi6ghbk1U6324.jpg)
![操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)-讀者寫(xiě)者問(wèn)題_第5頁(yè)](http://file4.renrendoc.com/view11/M00/38/1A/wKhkGWWvCPOAaurUAADi6ghbk1U6325.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEI課程設(shè)計(jì)說(shuō)明書(shū)題目:讀者寫(xiě)者問(wèn)題課程:操作系統(tǒng)院(部):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專(zhuān)業(yè):軟件工程目錄課程設(shè)計(jì)任務(wù)書(shū) 1題目生產(chǎn)者消費(fèi)者問(wèn)題 2一、問(wèn)題描述與基本要求 2二、問(wèn)題分析與算法描述 2三、程序設(shè)計(jì) 3四、源程序 5五、測(cè)試情況 12結(jié)論 13課程設(shè)計(jì)指導(dǎo)教師評(píng)語(yǔ) 14計(jì)算機(jī)學(xué)院課程設(shè)計(jì)說(shuō)明書(shū)PAGE12設(shè)計(jì)題目讀者寫(xiě)者問(wèn)題已知技術(shù)參數(shù)和設(shè)計(jì)要求已知技術(shù)參數(shù):讀者-寫(xiě)者問(wèn)題的讀寫(xiě)操作限制(包括讀者優(yōu)先和寫(xiě)者優(yōu)先)寫(xiě)-寫(xiě)互斥:不能有兩個(gè)寫(xiě)者同時(shí)進(jìn)行寫(xiě)操作讀-寫(xiě)互斥:不能同時(shí)有一個(gè)在讀,而另一個(gè)在寫(xiě)。讀-讀允許:可以有一個(gè)或多個(gè)讀者在讀。讀者優(yōu)先的附加限制:如果讀者申請(qǐng)進(jìn)行讀時(shí)已有另一個(gè)讀者正在讀作,則該讀者可直接開(kāi)始讀。寫(xiě)者優(yōu)先的附加限制:如果一個(gè)讀者申請(qǐng)進(jìn)行讀時(shí)已有另一個(gè)寫(xiě)者在等待訪(fǎng)問(wèn)共享資源,則該讀者必須等到?jīng)]有寫(xiě)者處于等待狀態(tài)后才能開(kāi)始讀操作。設(shè)計(jì)要求:要求能創(chuàng)建多個(gè)讀者,寫(xiě)者,并在每個(gè)讀者/寫(xiě)者創(chuàng)建時(shí)、發(fā)出讀寫(xiě)申請(qǐng)時(shí)、開(kāi)始讀/寫(xiě)操作和結(jié)束讀/寫(xiě)操作時(shí)分別顯示一行提示信息,以檢查所有處理都遵守相應(yīng)的讀寫(xiě)操作限制。設(shè)計(jì)內(nèi)容與步驟設(shè)計(jì)內(nèi)容:在Windows環(huán)境下,利用WindowsAPI,實(shí)現(xiàn)讀者寫(xiě)者問(wèn)題,包括讀者優(yōu)先和寫(xiě)者優(yōu)先。設(shè)計(jì)步驟:?jiǎn)栴}的定義與分析。根據(jù)設(shè)計(jì)題目的要求,分析和理解問(wèn)題。概要設(shè)計(jì)及流程圖。根據(jù)題目所涉及內(nèi)容,參照所學(xué)知識(shí),確定解決/設(shè)計(jì)方案,畫(huà)出相關(guān)流程圖。問(wèn)題的實(shí)現(xiàn)與編碼。調(diào)試與測(cè)試。根據(jù)題目?jī)?nèi)容設(shè)計(jì)測(cè)試用例,使之能夠充分證明設(shè)計(jì)完成的正確性。總結(jié)分析。 設(shè)計(jì)工作計(jì)劃與進(jìn)度安排1.系統(tǒng)實(shí)現(xiàn)8學(xué)時(shí)2.課程設(shè)計(jì)說(shuō)明書(shū)2學(xué)時(shí)設(shè)計(jì)考核要求設(shè)計(jì)情況(80%)考勤情況(20%)題目讀者寫(xiě)者問(wèn)題問(wèn)題描述與基本要求VarRNinteger;L,mx:semaphore:=RN,1;BeginParbegin
Reader:begin
Repeat
Swait(L,1,1);
Swait(mx,1,0);
.
Performreaderoperation;
Ssignal(L,1);
Untilfalse;
EndWriter:begin
RepeatSwait(mx,1,1,l,RN,0);Performwriteroperation;Ssignal(mx,1);Untilfalse;EndParendEnd其中,Swait(mx,1,0)語(yǔ)句起著開(kāi)關(guān)作用,只要無(wú)Writer進(jìn)程進(jìn)入寫(xiě),mx=1,reader進(jìn)程就都可以進(jìn)入讀。但是要一旦有Writer進(jìn)程進(jìn)入寫(xiě)時(shí),其MX=0,則任何reader進(jìn)程就都無(wú)法進(jìn)入讀。Swait(mx,1,1,l,RN,0)語(yǔ)句表示僅當(dāng)既無(wú)Write進(jìn)程在寫(xiě)(mx=1),又無(wú)reader進(jìn)程在讀(L=RN)時(shí),writer進(jìn)程才能進(jìn)入臨界區(qū)寫(xiě)。二、問(wèn)題分析與算法描述在Windows7環(huán)境下,創(chuàng)建一個(gè)包含n個(gè)線(xiàn)程的控制臺(tái)進(jìn)程。用這n個(gè)線(xiàn)程來(lái)表示n個(gè)讀者或?qū)懻?。每個(gè)線(xiàn)程按相應(yīng)測(cè)試數(shù)據(jù)文件的要求,進(jìn)行讀寫(xiě)操作。請(qǐng)用信號(hào)量機(jī)制分別實(shí)現(xiàn)讀者優(yōu)先和寫(xiě)者優(yōu)先的讀者-寫(xiě)者問(wèn)題。讀者-寫(xiě)者問(wèn)題的讀寫(xiě)操作限制:讀者-寫(xiě)者的讀寫(xiě)限制(包括讀者優(yōu)先和寫(xiě)者優(yōu)先)1)寫(xiě)-寫(xiě)互斥,即不能有兩個(gè)寫(xiě)者同時(shí)進(jìn)行寫(xiě)操作2)讀-寫(xiě)互斥,即不能同時(shí)有一個(gè)讀者在讀,同時(shí)卻有一個(gè)寫(xiě)者在寫(xiě)3)讀讀允許,即可以有2個(gè)以上的讀者同時(shí)讀將所有的讀者和所有的寫(xiě)者分別放進(jìn)兩個(gè)等待隊(duì)列中,當(dāng)讀允許時(shí)就讓讀者隊(duì)列釋放一個(gè)或多個(gè)讀者,當(dāng)寫(xiě)允許時(shí),釋放第一個(gè)寫(xiě)者操作。讀者寫(xiě)者問(wèn)題的定義如下:有一個(gè)許多進(jìn)程共享的數(shù)據(jù)區(qū),這個(gè)數(shù)據(jù)區(qū)可以是一個(gè)文件或者主存的一塊空間;有一些只讀取這個(gè)數(shù)據(jù)區(qū)的進(jìn)程(Reader)和一些只往數(shù)據(jù)區(qū)寫(xiě)數(shù)據(jù)的進(jìn)程(Writer),此外還需要滿(mǎn)足以下條件:1)任意多個(gè)讀進(jìn)程可以同時(shí)讀這個(gè)文件;2)一次只有一個(gè)寫(xiě)進(jìn)程可以往文件中寫(xiě);3)如果一個(gè)寫(xiě)進(jìn)程正在進(jìn)行操作,禁止任何讀進(jìn)程度文件。我們需要分兩種情況實(shí)現(xiàn)該問(wèn)題:讀優(yōu)先:要求指一個(gè)讀者試圖進(jìn)行讀操作時(shí),如果這時(shí)正有其他讀者在進(jìn)行操作,他可直接開(kāi)始讀操作,而不需要等待。寫(xiě)優(yōu)先:一個(gè)讀者試圖進(jìn)行讀操作時(shí),如果有其他寫(xiě)者在等待進(jìn)行寫(xiě)操作或正在進(jìn)行寫(xiě)操作,他要等待該寫(xiě)者完成寫(xiě)操作后才開(kāi)始讀操作。三、程序設(shè)計(jì)程序由兩部分組成:1。讀者-寫(xiě)者模塊:包括系統(tǒng)調(diào)用接口,讀者-寫(xiě)者活動(dòng)描述主程序。系統(tǒng)接口主要功能是通過(guò)管道向父進(jìn)程發(fā)送系統(tǒng)調(diào)用命令,并讀取父進(jìn)程送來(lái)的返回值。讀者-寫(xiě)者活動(dòng)程序根據(jù)臨界資源的共享,互斥原則編制,具體見(jiàn)源程序。2。主控模塊:主控模塊實(shí)現(xiàn)系統(tǒng)初始化系統(tǒng)調(diào)用命令接收與解釋執(zhí)行,系統(tǒng)調(diào)用功能的實(shí)現(xiàn)(包括信號(hào)量機(jī)制),及讀者-寫(xiě)者活動(dòng)過(guò)程記錄與顯示。初始化系統(tǒng)環(huán)境
建立通信管道
啟動(dòng)讀者-寫(xiě)者進(jìn)程
接收系統(tǒng)調(diào)用命令解釋執(zhí)行
系統(tǒng)初始化模塊管道建立模塊進(jìn)程啟動(dòng)模塊命令解釋模塊Wait()Signal()Wakeup()Block()四、源程序#include<windows.h>#include<ctype.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#defineMAX_PERSON100#defineREADER0//讀者#defineWRITER1//寫(xiě)者#defineEND-1#defineRREADER#defineWWRITERtypedefstruct_Person{HANDLEthread;//定義處理線(xiàn)程的句柄inttype;//進(jìn)程類(lèi)型(讀寫(xiě))intstartTime;//開(kāi)始時(shí)間intworktime;//運(yùn)行時(shí)間intID;//進(jìn)程號(hào)}Person;Persong_Persons[MAX_PERSON];intg_NumPerson=0;longg_CurrentTime=0;//基本時(shí)間片數(shù)intg_PersonLists[]={//進(jìn)程隊(duì)列1,R,3,5,2,W,4,5,3,R,5,2,4,R,6,5,5,W,5.1,3,END,};intg_NumOfReading=0;//正在讀進(jìn)程的個(gè)數(shù)intg_NumOfWriteRequest=0;//申請(qǐng)寫(xiě)進(jìn)程的個(gè)數(shù)HANDLEreadsignal;//讀者信號(hào)HANDLEwritesignal;//寫(xiě)者信號(hào)boolfinished=false;//所有的讀完成boolwfinished=false;//所有的寫(xiě)完成voidCreatePersonList(int*pPersonList);boolCreateReader(intStartTime,intWorkTime,intID);boolCreateWriter(intStartTime,intWorkTime,intID);DWORDWINAPIReaderProc(LPVOIDlpParam);DWORDWINAPIWriterProc(LPVOIDlpParam);intmain(){readsignal=CreateSemaphore(NULL,1,100,NULL);//創(chuàng)建信號(hào)燈,當(dāng)前可用的資源數(shù)為1,最大為100writesignal=CreateSemaphore(NULL,1,100,NULL);//創(chuàng)建信號(hào)燈,當(dāng)前可用的資源數(shù)為1,最大為100CreatePersonList(g_PersonLists);//CreateAllthereaderandwritersprintf("正在創(chuàng)建讀者和寫(xiě)者\(yùn)n...\n");g_CurrentTime=0;while(true){g_CurrentTime++;Sleep(300);//300msprintf("CurrentTime=%d\n",g_CurrentTime);if(finished)return0;}//return0;}voidCreatePersonList(int*pPersonLists){inti=0;int*pList=pPersonLists;boolRet;while(pList[0]!=END){switch(pList[1]){caseR:Ret=CreateReader(pList[2],pList[3],pList[0]);//351,w452,523,654break;caseW:Ret=CreateWriter(pList[2],pList[3],pList[0]);break;}if(!Ret)printf("CreatePerson%diswrong\n",pList[0]);pList+=4;//movetonextpersonlist}}DWORDWINAPIReaderProc(LPVOIDlpParam)//讀過(guò)程{Person*pPerson=(Person*)lpParam;//waitforthestarttimewhile(g_CurrentTime!=pPerson->startTime){}printf("Reader%disRequesting...\n",pPerson->ID);printf("\n\n\n");//等待寫(xiě)者發(fā)出請(qǐng)求WaitForSingleObject(readsignal,INFINITE);if(g_NumOfReading==0){WaitForSingleObject(writesignal,INFINITE);}g_NumOfReading++;ReleaseSemaphore(readsignal,1,NULL);pPerson->startTime=g_CurrentTime;printf("Reader%disReadingtheSharedBuffer...\n",pPerson->ID);printf("\n\n\n");while(g_CurrentTime<=pPerson->startTime+pPerson->worktime){}printf("Reader%disExit...\n",pPerson->ID);printf("\n\n\n");WaitForSingleObject(readsignal,INFINITE);g_NumOfReading--;if(g_NumOfReading==0){ReleaseSemaphore(writesignal,1,NULL);//此時(shí)沒(méi)有讀者,可以寫(xiě)}ReleaseSemaphore(readsignal,1,NULL);if(pPerson->ID==4)finished=true;//所有的讀寫(xiě)完成ExitThread(0);return0;}DWORDWINAPIWriterProc(LPVOIDlpParam){Person*pPerson=(Person*)lpParam;//waitforthestarttimewhile(g_CurrentTime!=pPerson->startTime){}printf("Writer%disRequesting...\n",pPerson->ID);printf("\n\n\n");WaitForSingleObject(writesignal,INFINITE);//modifythewriter'srealstarttimepPerson->startTime=g_CurrentTime;printf("Writer%disWrittingtheSharedBuffer...\n",pPerson->ID);while(g_CurrentTime<=pPerson->startTime+pPerson->worktime){}printf("Writer%disExit...\n",pPerson->ID);printf("\n\n\n");//g_NumOfWriteRequest--;ReleaseSemaphore(writesignal,1,NULL);if(pPerson->ID==4)finished=true;//所有的讀寫(xiě)完成ExitThread(0);return0;}boolCreateReader(intStartTime,intWorkTime,intID){DWORDdwThreadID;if(g_NumPerson>=MAX_PERSON)returnfalse;Person*pPerson=&g_Persons[g_NumPerson];pPerson->ID=ID;pPerson->startTime=StartTime;pPerson->worktime=WorkTime;pPerson->type=READER;g_NumPerson++;//CreateanNewThreadpPerson->thread=CreateThread(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID);if(pPerson->thread==NULL)returnfalse;returntrue;}boolCreateWriter(intStartTime,intWorkTime,intID){DWORDdwThreadID;if(g_NumPerson>=MAX_PERSON)returnfalse;Person*pPerson=&g_Persons[g_NumPerson];pPerson->ID=ID;pPerson->startTime=StartTime;pPers
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人居間協(xié)議范文(2篇)
- 2025年個(gè)人貨運(yùn)汽車(chē)租賃合同模板(2篇)
- 2025年產(chǎn)品經(jīng)銷(xiāo)協(xié)議標(biāo)準(zhǔn)范文(2篇)
- 2025年五年級(jí)班主任期末個(gè)人工作總結(jié)模版(2篇)
- 2025年產(chǎn)品供貨合同格式范文(2篇)
- 智慧小鎮(zhèn)用地中介合同范本
- 辦公大樓石材運(yùn)送合同模板
- 2025年度安防設(shè)備展覽會(huì)現(xiàn)場(chǎng)展位安保合同
- 婚慶服務(wù)居間合同
- 教育設(shè)施改造貸款居間合同
- RB/T 101-2013能源管理體系電子信息企業(yè)認(rèn)證要求
- GB/T 4513.7-2017不定形耐火材料第7部分:預(yù)制件的測(cè)定
- GB/T 10205-2009磷酸一銨、磷酸二銨
- 公司財(cái)務(wù)制度及流程
- 高支模專(zhuān)項(xiàng)施工方案(專(zhuān)家論證)
- 深圳版初中英語(yǔ)單詞匯總
- 健康養(yǎng)生,快樂(lè)生活課件
- 《物流與供應(yīng)鏈管理-新商業(yè)、新鏈接、新物流》配套教學(xué)課件
- MDD指令附錄一 基本要求檢查表2013版
- 駱駝祥子1一24章批注
- 新部編人教版四年級(jí)下冊(cè)道德與法治全冊(cè)教案(教學(xué)設(shè)計(jì))
評(píng)論
0/150
提交評(píng)論