2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論