版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 操作系統(tǒng)課程設(shè)計(jì)說明書</p><p> 學(xué)院名稱: 計(jì)算機(jī)與信息工程學(xué)院 </p><p> 班級(jí)名稱: 網(wǎng)工114班 </p><p> 組長姓名: 何銘川 </p><p> 學(xué) 號(hào):
2、 2011211371 </p><p> 題 目: 讀者寫者問題 </p><p> 指導(dǎo)教師: </p><p> 組員姓名: </p><p> 起止日期: 2013
3、.06.24—2013.06.28 </p><p><b> 第一部分:正文部分</b></p><p><b> 一、選題背景</b></p><p> 所謂讀者寫者問題,是指保證一個(gè)writer進(jìn)程必須與其他進(jìn)程互斥地訪問共享對(duì)象的同步問題。</p><p> 讀者寫者問題可以這樣
4、的描述,有一群寫者和一群讀者,寫者在寫同一本書,讀者也在讀這本書,多個(gè)讀者可以同時(shí)讀這本書,但是,只能有一個(gè)寫者在寫書,并且,讀者必寫者優(yōu)先,也就是說,讀者和寫者同時(shí)提出請(qǐng)求時(shí),讀者優(yōu)先。當(dāng)讀者提出請(qǐng)求時(shí)需要有一個(gè)互斥操作,另外,需要有一個(gè)信號(hào)量S來當(dāng)前是否可操作。</p><p> 信號(hào)量機(jī)制是支持多道程序的并發(fā)操作系統(tǒng)設(shè)計(jì)中解決資源共享時(shí)進(jìn)程間的同步與互斥的重要機(jī)制,而讀者寫者問題則是這一機(jī)制的一個(gè)經(jīng)典范例
5、。</p><p> 與記錄型信號(hào)量解決讀者—寫者問題不同,信號(hào)量機(jī)制它增加了一個(gè)限制,即最多允許RN個(gè)讀者同時(shí)讀。為此,又引入了一個(gè)信號(hào)量L,并賦予初值為RN,通過執(zhí)行wait(L,1,1)操作,來控制讀者的數(shù)目,每當(dāng)有一個(gè)讀者進(jìn)入時(shí),就要執(zhí)行wait(L,1,1)操作,使L的值減1。當(dāng)有RN個(gè)讀者進(jìn)入讀后,L便減為0,第RN+1 個(gè)讀者要進(jìn)入讀時(shí),必然會(huì)因wait(L,1,1)操作失敗而堵塞。對(duì)利用信號(hào)量來
6、解決讀者—寫者問題的描述如下:</p><p> Var RN integer;L,mx:semaphore: =RN,1;</p><p><b> Begin</b></p><p><b> Parbegin</b></p><p> Reader :begin</p>
7、<p><b> Repeat</b></p><p> Swait(L,1,1);</p><p> Swait(mx,1,0);</p><p> Perform reader operation;</p><p> Ssignal(L,1);</p><p> Unt
8、il false;</p><p><b> End</b></p><p> Writer:begin</p><p><b> Repeat</b></p><p> Swait(mx ,1,1,l,RN,0);</p><p> Perform writer
9、operation;</p><p> Ssignal(mx,1);</p><p> Until false;</p><p><b> End</b></p><p><b> Parend</b></p><p><b> End</b>
10、</p><p> 其中,Swait(mx,1,0)語句起著開關(guān)作用,只要無Writer進(jìn)程進(jìn)入些,mx=1,reader進(jìn)程就都可以進(jìn)入讀。但是要一旦有Writer進(jìn)程進(jìn)入寫時(shí),其MX=0,則任何reader進(jìn)程就都無法進(jìn)入讀。Swait(mx ,1,1,l,RN,0)語句表示僅當(dāng)既無Write進(jìn)程在寫(mx=1),又無reader進(jìn)程在讀(L=RN)時(shí),writer進(jìn)程才能進(jìn)入臨界區(qū)寫。</p>
11、<p> 本設(shè)計(jì)方案就是通過利用記錄型信號(hào)量對(duì)讀者寫者問題的解決過程進(jìn)行模擬演示,形象地闡述記錄型信號(hào)量機(jī)制的工作原理。</p><p><b> 二、設(shè)計(jì)思路</b></p><p> 在Windows 7 環(huán)境下,創(chuàng)建一個(gè)包含n 個(gè)線程的控制臺(tái)進(jìn)程。用這n 個(gè)線程來表示n個(gè)讀者或?qū)懻?。每個(gè)線程按相應(yīng)測試數(shù)據(jù)文件的要求,進(jìn)行讀寫操作。請(qǐng)用信號(hào)量機(jī)
12、制分別實(shí)現(xiàn)讀者優(yōu)先和寫者優(yōu)先的讀者-寫者問題。</p><p> 讀者-寫者問題的讀寫操作限制:</p><p> 讀者-寫者的讀寫限制(包括讀者優(yōu)先和寫者優(yōu)先)</p><p> ⑴寫-寫互斥,即不能有兩個(gè)寫者同時(shí)進(jìn)行寫操作</p><p> ?、谱x-寫互斥,即不能同時(shí)有一個(gè)讀者在讀,同時(shí)卻有一個(gè)寫者在寫</p><
13、;p> ?、亲x讀允許,即可以有2個(gè)以上的讀者同時(shí)讀</p><p> 將所有的讀者和所有的寫者分別放進(jìn)兩個(gè)等待隊(duì)列中,當(dāng)讀允許時(shí)就讓讀者隊(duì)列釋放一個(gè)或多個(gè)讀者,當(dāng)寫允許時(shí),釋放第一個(gè)寫者操作。讀者寫者問題的定義如下:有一個(gè)許多進(jìn)程共享的數(shù)據(jù)區(qū),這個(gè)數(shù)據(jù)區(qū)可以是一個(gè)文件或者主存的一塊空間;有一些只讀取這個(gè)數(shù)據(jù)區(qū)的進(jìn)程(Reader)和一些只往數(shù)據(jù)區(qū)寫數(shù)據(jù)的進(jìn)程(Writer),此外還需要滿足以下條件:⑴任意
14、多個(gè)讀進(jìn)程可以同時(shí)讀這個(gè)文件;⑵一次只有一個(gè)寫進(jìn)程可以往文件中寫;⑶如果一個(gè)寫進(jìn)程正在進(jìn)行操作,禁止任何讀進(jìn)程度文件。我們需要分兩種情況實(shí)現(xiàn)該問題:</p><p> 讀優(yōu)先:要求指一個(gè)讀者試圖進(jìn)行讀操作時(shí),如果這時(shí)正有其他讀者在進(jìn)行操作,他可直接開始讀操作,而不需要等待。寫優(yōu)先:一個(gè)讀者試圖進(jìn)行讀操作時(shí),如果有其他寫者在等待進(jìn)行寫操作或正在進(jìn)行寫操作,他要等待該寫者完成寫操作后才開始讀操作,具體流程如下圖2.
15、1所示。</p><p> 圖2.1讀者—寫者總體流程框圖</p><p><b> 三、過程論述</b></p><p><b> ?、鸥乓O(shè)計(jì)</b></p><p><b> 程序由兩部分組成:</b></p><p> ?、僮x者-寫者模塊:
16、包括系統(tǒng)調(diào)用接口,讀者-寫者活動(dòng)描述主程序。系統(tǒng)接口主要功能是通過管道向父進(jìn)程發(fā)送系統(tǒng)調(diào)用命令,并讀取父進(jìn)程送來的返回值。讀者-寫者活動(dòng)程序根據(jù)臨界資源的共享,互斥原則編制,具體見源程序。</p><p> ?、谥骺啬K:主控模塊實(shí)現(xiàn)系統(tǒng)初始化系統(tǒng)調(diào)用命令接收與解釋執(zhí)行,系統(tǒng)調(diào)用功能的實(shí)現(xiàn)(包括信號(hào)量機(jī)制),及讀者-寫者活動(dòng)過程記錄與顯示。</p><p><b> 初始化系統(tǒng)
17、環(huán)境</b></p><p><b> 建立通信管道</b></p><p><b> 啟動(dòng)讀者-寫者進(jìn)程</b></p><p><b> 接收系統(tǒng)調(diào)用命令</b></p><p><b> 解釋執(zhí)行</b></p>&
18、lt;p><b> ⑵詳細(xì)設(shè)計(jì)</b></p><p> 為了實(shí)現(xiàn)讀者和寫者的讀寫過程,將每個(gè)讀者和每個(gè)寫者作為了一個(gè)單獨(dú)的線程,所以設(shè)置了兩個(gè)類,一個(gè)是讀者類Reader,一個(gè)是寫者類Writer.以讀者類為例:</p><p> 一個(gè)讀者的動(dòng)作過程為由睡眠->等待->開始讀->結(jié)束讀->睡眠的一個(gè)循環(huán)過程,而一個(gè)寫者的動(dòng)作過程也
19、為此.</p><p> 讀者調(diào)用方法Sleep()進(jìn)行等待,調(diào)用Weakup()方法喚醒,最后在調(diào)用endReading()方法結(jié)束讀入,釋放運(yùn)行空間.寫者同讀者.</p><p> 首先要實(shí)現(xiàn)睡眠的方法Sleep(),讀者和寫者在睡眠過程都應(yīng)該是一樣的,只是他們睡眠的時(shí)間不同,所以只需寫出一個(gè)方法;</p><p> 在方法中,控制線程休眠隨機(jī)的時(shí)間,由于
20、每個(gè)讀者或?qū)懻叨际且粋€(gè)線程,而每個(gè)讀者或?qū)懻咚麄児ぷ餍菝叩臅r(shí)間都不一定相同,他們請(qǐng)求工作的時(shí)間也不一定相同,所以取了隨機(jī)時(shí)間。</p><p> 其次設(shè)置了讀者的兩個(gè)方法,開始讀和結(jié)束讀,由于這只是個(gè)模擬讀寫問題,所以只需要知道結(jié)果就行,就不用顯示出他是怎么讀的。</p><p> 在開始讀中,當(dāng)有寫者在寫時(shí),讀者需要等待wait(),在沒有人在工作時(shí),如果有寫者和讀者同時(shí)請(qǐng)求,那么就
21、讓寫者先進(jìn),這是寫者優(yōu)先。所以這就歸納于一種情況, 當(dāng)讀者布爾變量為FALSE時(shí),如果有需要工作的寫者,那么讀者就等待。當(dāng)讀者請(qǐng)求讀入后,計(jì)數(shù)有多少讀者需要工作的變量readerCount +1,如果這是第一個(gè)進(jìn)入工作的讀者就需要將顯示是否有讀者在工作的讀者布爾變量變?yōu)門RU –E。具體流程如下圖3.1、3.2所示。</p><p> 圖3.1創(chuàng)建寫者進(jìn)程
22、 圖3.2創(chuàng)建讀者進(jìn)程</p><p><b> 四、結(jié)果分析</b></p><p> ?、艤y試數(shù)據(jù)文件格式:</p><p> 測試數(shù)據(jù)文件包括n 行測試數(shù)據(jù),分別描述創(chuàng)建的n 個(gè)線程是讀者還是寫者,以及讀寫操作的開始時(shí)間和持續(xù)時(shí)間。每行測試數(shù)據(jù)包括四個(gè)字段,各字段間用空格分隔。第一字段為一個(gè)正整數(shù),表示線程序號(hào)。第二字段表示相應(yīng)線程角
23、色,R 表示讀者是,W 表示寫者。第三字段為一個(gè)正數(shù),表示讀寫操作的開始時(shí)間。線程創(chuàng)建后,延時(shí)相應(yīng)時(shí)間(單位為秒)后發(fā)出對(duì)共享資源的讀寫申請(qǐng)。第四字段為一個(gè)正數(shù),表示讀寫操作的持續(xù)時(shí)間。當(dāng)線程讀寫申請(qǐng)成功后,開始對(duì)共享資源的讀寫操作,該操作持續(xù)相應(yīng)時(shí)間后結(jié)束,并釋放共享資源。</p><p><b> ?、茰y試結(jié)果:</b></p><p> 在讀者寫者同時(shí)在隊(duì)列中
24、等待申請(qǐng)資時(shí),讀者優(yōu)先調(diào)用資源。而且如果一個(gè)讀者申請(qǐng)進(jìn)行讀操作時(shí)已有另一讀者正在進(jìn)行讀操作,則該讀者可直接開始讀操作,即讀讀允許。</p><p> 進(jìn)程1是W操作,在時(shí)間3時(shí)進(jìn)入隊(duì)列,運(yùn)行時(shí)間是5,在它進(jìn)入時(shí)沒有進(jìn)程占用資源,它既占用資源;知道它釋放資源,等候的進(jìn)程有3,4,5,具體表現(xiàn)如下圖4.1、圖4.2所示;</p><p> 圖4.1進(jìn)程1進(jìn)入圖</p><
25、;p> 圖4.2進(jìn)程1完成圖</p><p> 進(jìn)程2是R操作,在時(shí)間16時(shí)進(jìn)入隊(duì)列,運(yùn)行時(shí)間是5,在它進(jìn)入時(shí)進(jìn)程4占用資源,它等待資源,當(dāng)4釋放時(shí)占用資源,具體表現(xiàn)如下圖4.3、圖4.4所示;</p><p> 圖4.3進(jìn)程2進(jìn)入圖</p><p> 圖4.4進(jìn)程2完成圖</p><p> 進(jìn)程3是R操作,在時(shí)間5時(shí)進(jìn)入隊(duì)列
26、,運(yùn)行時(shí)間是2,在它進(jìn)入時(shí)進(jìn)程1占用資源,它等待資源,當(dāng)進(jìn)程1釋放資源后,由于讀者優(yōu)先,進(jìn)程3,5同時(shí)調(diào)運(yùn)資源,具體表現(xiàn)如下圖4.5、圖4.6所示;</p><p> 圖4.5進(jìn)程3進(jìn)入圖</p><p> 圖4.6進(jìn)程3完成圖</p><p> 進(jìn)程4是W操作,在時(shí)間6時(shí)進(jìn)入隊(duì)列,運(yùn)行時(shí)間是5,在它進(jìn)入時(shí)進(jìn)程1占用資源,它等待資源,當(dāng)進(jìn)程1釋放資源后,由于讀
27、者優(yōu)先,進(jìn)程3,5占用資源,它依然等待,直到進(jìn)程3,5都結(jié)束,具體表現(xiàn)如下圖4.7、圖4.8所示;</p><p> 圖4.7進(jìn)程4進(jìn)入圖</p><p> 圖4.8進(jìn)程4完成圖</p><p> 進(jìn)程5是R操作,在時(shí)間4時(shí)進(jìn)入隊(duì)列,運(yùn)行時(shí)間是3, 在它進(jìn)入時(shí)進(jìn)程1占用資源,它等待資源,當(dāng)進(jìn)程1釋放資源后,由于讀者優(yōu)先,進(jìn)程3,5同時(shí)調(diào)運(yùn)資源,具體表現(xiàn)如下圖4
28、.9、圖4.10所示;</p><p> 圖4.9進(jìn)程5進(jìn)入圖</p><p> 圖4.10進(jìn)程5完成圖</p><p> 進(jìn)程6是R操作,在時(shí)間17時(shí)進(jìn)入隊(duì)列,運(yùn)行時(shí)間是7,在它進(jìn)入時(shí)進(jìn)程2占用資源,它等待進(jìn)程2釋放后最后調(diào)用資源,具體表現(xiàn)如下圖4.11所示。</p><p> 圖4.11進(jìn)程6進(jìn)入圖</p><
29、p><b> 五、總結(jié)</b></p><p> 本次操作系統(tǒng)課程設(shè)計(jì)我們小組完成的是讀者寫者問題,通過學(xué)習(xí)信號(hào)量機(jī)制,我們對(duì)其的同步與互斥機(jī)制有了很深掌握并認(rèn)識(shí)到同步與互斥可以保證在一個(gè)時(shí)間內(nèi)只有一個(gè)線程對(duì)某個(gè)資源有控制權(quán)。共享資源包括全局變量、公共數(shù)據(jù)成員或者句柄等。同步還可以使得有關(guān)聯(lián)交互作用的代碼按一定的順序執(zhí)行。</p><p> 總體來說我認(rèn)為
30、操作系統(tǒng)這門學(xué)科在計(jì)算機(jī)科學(xué)當(dāng)是中非常重要的。他將我們學(xué)過的編程語言聯(lián)系起來,可以說是第一次利用C語言利用windows的API與系統(tǒng)進(jìn)行“溝通”。 </p><p> 總而言之,這次操作系統(tǒng)的課程設(shè)計(jì)收獲頗豐,復(fù)習(xí)了許多東西,也從新學(xué)會(huì)了許多東西。我想這也許就是課程設(shè)計(jì)的最終目的吧。</p><p><b> 第二部分:參考文獻(xiàn)</b></p&g
31、t;<p> 1.譚浩強(qiáng).C++程序設(shè)計(jì)[M].清華大學(xué)出版社,2004</p><p> 2.湯子瀛. 計(jì)算機(jī)操作系統(tǒng)[M]. 西安電子科技大學(xué)出版社. 2006.9</p><p> 3.劉振安、劉燕君著.C++程序設(shè)計(jì)課程設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2004</p><p> 4.[美]Abraham Silberschatz, Pete
32、r Baer Galvin, Greg Gagne 著. 鄭扣根 譯. 操作系統(tǒng)概念(第六版)[M].高等教育出版社,2004</p><p> 5.陳向群,向勇 等. Windows操作系統(tǒng)原理(第二版)[M].機(jī)械工業(yè)出版社,2004</p><p> 第三部分:指導(dǎo)教師評(píng)語</p><p><b> 第四部分:成績?cè)u(píng)定</b><
33、;/p><p> 第五部分:附錄(源代碼)</p><p> #include <windows.h></p><p> #include <ctype.h></p><p> #include <stdio.h></p><p> #include <string.h&
34、gt;</p><p> #include <stdlib.h></p><p> #include <malloc.h></p><p> #define MAX_PERSON 100</p><p> #define READER 0 //讀者</p><p>
35、 #define WRITER 1 //寫者</p><p> #define END -1</p><p> #define R READER</p><p> #define W WRITER</p><p> typedef struct _Pers
36、on</p><p><b> {</b></p><p> HANDLE m_hThread;//定義處理線程的句柄</p><p> int m_nType;//進(jìn)程類型(讀寫)</p><p> int m_nStartTime;//開始時(shí)間</p><p> int
37、 m_nWorkTime;//運(yùn)行時(shí)間</p><p> int m_nID;//進(jìn)程號(hào)</p><p><b> }Person;</b></p><p> Person g_Persons[MAX_PERSON];</p><p> int g_NumPerson = 0;</p>
38、;<p> long g_CurrentTime= 0;//基本時(shí)間片數(shù)</p><p> int g_PersonLists[] = {//進(jìn)程隊(duì)列</p><p> 1, W, 3, 5, 2, W, 16, 5, 3, R, 5, 2,</p><p> 4, W, 6, 5, 5, R, 4, 3, 6, R, 17,
39、7,</p><p><b> END,</b></p><p><b> };</b></p><p> int g_NumOfReading = 0;</p><p> int g_NumOfWriteRequest = 0;//申請(qǐng)寫進(jìn)程的個(gè)數(shù)</p><
40、;p> HANDLE g_hReadSemaphore;//讀者信號(hào)</p><p> HANDLE g_hWriteSemaphore;//寫者信號(hào)</p><p> bool finished = false; //所有的讀完成</p><p> //bool wfinished = false; //所有的寫完成</p><p
41、> void CreatePersonList(int *pPersonList);</p><p> bool CreateReader(int StartTime,int WorkTime,int ID);</p><p> bool CreateWriter(int StartTime,int WorkTime,int ID);</p><p&g
42、t; DWORD WINAPI ReaderProc(LPVOID lpParam);</p><p> DWORD WINAPI WriterProc(LPVOID lpParam);</p><p> int main()</p><p><b> {</b></p><p> g_hRea
43、dSemaphore = CreateSemaphore(NULL,1,100,NULL); //創(chuàng)建信號(hào)燈,當(dāng)前可用的資源數(shù)為1,最大為100</p><p> g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL); //創(chuàng)建信號(hào)燈,當(dāng)前可用的資源數(shù)為1,最大為100</p><p> CreatePersonList(g_Per
44、sonLists); // Create All the reader and writers</p><p> printf("Created all the reader and writer\n...\n");</p><p> g_CurrentTime = 0;</p><p> while(true)</p>&l
45、t;p><b> {</b></p><p> g_CurrentTime++;</p><p> Sleep(300); // 300 ms</p><p> printf("CurrentTime = %d\n",g_CurrentTime);</p><p> if(finish
46、ed) return 0;</p><p> } // return 0;</p><p><b> }</b></p><p> void CreatePersonList(int *pPersonLists)</p><p><b> {</b></p><p>
47、<b> int i=0;</b></p><p> int *pList = pPersonLists;</p><p><b> bool Ret;</b></p><p> while(pList[0] != END)</p><p><b> {</b>&
48、lt;/p><p> switch(pList[1])</p><p><b> {</b></p><p><b> case R:</b></p><p> Ret = CreateReader(pList[2],pList[3],pList[0]); //351,w452,523,654
49、</p><p><b> break;</b></p><p><b> case W:</b></p><p> Ret = CreateWriter(pList[2],pList[3],pList[0]);</p><p><b> break;</b></
50、p><p><b> }</b></p><p><b> if(!Ret)</b></p><p> printf("Create Person %d is wrong\n",pList[0]);</p><p> pList += 4; // move to next p
51、erson list</p><p><b> }</b></p><p><b> }</b></p><p> DWORD WINAPI ReaderProc(LPVOID lpParam)//讀過程</p><p><b> {</b></p>&
52、lt;p> Person *pPerson = (Person*)lpParam;</p><p> // wait for the start time</p><p> while(g_CurrentTime != pPerson->m_nStartTime){ }</p><p> printf("Reader %d is Req
53、uesting ...\n",pPerson->m_nID);</p><p> printf("\n\n************************************************\n");</p><p> // wait for the write request</p><p> WaitForS
54、ingleObject(g_hReadSemaphore,INFINITE); if(g_NumOfReading ==0)</p><p><b> {</b></p><p> WaitForSingleObject(g_hWriteSemaphore,INFINITE);</p><p><b> }</b>&
55、lt;/p><p> g_NumOfReading++;</p><p> ReleaseSemaphore(g_hReadSemaphore,1,NULL);</p><p> pPerson->m_nStartTime = g_CurrentTime;</p><p> printf("Reader %d is Rea
56、ding the Shared Buffer... \n",pPerson->m_n ID);</p><p> printf("\n\n************************************************\n");</p><p> while(g_CurrentTime<=pPerson->m_nStart
57、Time + pPerson->m_nWorkTime){}</p><p> printf("Reader %d is Exit...\n",pPerson->m_nID);</p><p> printf("\n\n************************************************\n");</
58、p><p> WaitForSingleObject(g_hReadSemaphore,INFINITE);</p><p> g_NumOfReading--;</p><p> if(g_NumOfReading == 0)</p><p><b> {</b></p><p> Rel
59、easeSemaphore(g_hWriteSemaphore,1,NULL);//此時(shí)沒有讀者,可以寫</p><p><b> }</b></p><p> ReleaseSemaphore(g_hReadSemaphore,1,NULL);</p><p> if(pPerson->m_nID == 4) finished =
60、 true; //所有的讀寫完成</p><p> ExitThread(0);</p><p><b> return 0;</b></p><p><b> }</b></p><p> DWORD WINAPI WriterProc(LPVOID lpParam)</p>
61、<p><b> {</b></p><p> Person *pPerson = (Person*)lpParam;</p><p> // wait for the start time</p><p> while(g_CurrentTime != pPerson->m_nStartTime){}</p&
62、gt;<p> printf("Writer %d is Requesting ...\n",pPerson->m_nID);</p><p> printf("\n\n************************************************\n");</p><p> WaitForSingleOb
63、ject(g_hWriteSemaphore,INFINITE);</p><p> // modify the writer's real start time</p><p> pPerson->m_nStartTime = g_CurrentTime;</p><p> printf("Writer %d is Writting
64、the Shared Buffer...\n",pPerson->m_nID);</p><p> while(g_CurrentTime<=pPerson->m_nStartTime+ pPerson->m_nWorkTime){}</p><p> printf("Writer %d is Exit...\n",pPerson-
65、>m_nID);</p><p> printf("\n\n************************************************\n");</p><p> //g_NumOfWriteRequest--;</p><p> ReleaseSemaphore(g_hWriteSemaphore,1,NULL
66、);</p><p> if(pPerson->m_nID == 4) finished = true;//所有的讀寫完成</p><p> ExitThread(0);</p><p><b> return 0;</b></p><p><b> }</b></p>
67、<p> bool CreateReader(int StartTime,int WorkTime,int ID)</p><p><b> {</b></p><p> DWORD dwThreadID;</p><p> if(g_NumPerson >= MAX_PERSON)</p><p&g
68、t; return false;</p><p> Person *pPerson = &g_Persons[g_NumPerson];</p><p> pPerson->m_nID = ID;</p><p> pPerson->m_nStartTime = StartTime;</p><p> pPers
69、on->m_nWorkTime = WorkTime;</p><p> pPerson->m_nType = READER;</p><p> g_NumPerson++;</p><p> // Create an New Thread</p><p> pPerson->m_hThread=CreateThre
70、ad(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID);</p><p> if(pPerson->m_hThread == NULL)</p><p> return false;</p><p> return true;</p><p><b> }<
71、/b></p><p> bool CreateWriter(int StartTime,int WorkTime,int ID)</p><p><b> {</b></p><p> DWORD dwThreadID;</p><p> if(g_NumPerson >= MAX_PERSON)
72、</p><p> return false;</p><p> Person *pPerson = &g_Persons[g_NumPerson];</p><p> pPerson->m_nID = ID;</p><p> pPerson->m_nStartTime = StartTime;</p&
73、gt;<p> pPerson->m_nWorkTime = WorkTime;</p><p> pPerson->m_nType = WRITER;</p><p> g_NumPerson++;</p><p> // Create an New Thread</p><p> pPerson-
74、>m_hThread=CreateThread(NULL,0,WriterProc,(LPVOID)pPerson,0,&dwThreadID);</p><p> if(pPerson->m_hThread == NULL)</p><p> return false;</p><p> return true;</p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 讀者寫者課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)-讀者寫者問題
- 操作系統(tǒng)課程設(shè)計(jì)--讀者寫者問題
- 操作系統(tǒng)課程設(shè)計(jì)——讀者寫者問題
- 操作系統(tǒng)課程設(shè)計(jì)---讀者-寫者問題實(shí)現(xiàn)
- 讀者與寫者-操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 操作系統(tǒng)原理課程設(shè)計(jì)讀者-寫者問題的實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)-- linux下讀者與寫者的問題實(shí)現(xiàn)
- 讀者寫者問題_寫者優(yōu)先參考答案
- 讀者寫者問題-操作系統(tǒng)實(shí)驗(yàn)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告-讀者寫著問題
- 《操作系統(tǒng)》課程設(shè)計(jì)--基于信號(hào)量與pv操作同步機(jī)制的讀者寫者問題的設(shè)計(jì)與實(shí)現(xiàn)
- 北理工操作系統(tǒng)實(shí)驗(yàn)二讀者寫者問題
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 迷宮問題課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)迷宮問題課程設(shè)計(jì)報(bào)告
- 跳舞搭配問題課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論