版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 操作系統(tǒng)課程設(shè)計說明書</p><p> 學院名稱: 計算機與信息工程學院 </p><p> 班級名稱: 網(wǎng)工114班 </p><p> 組長姓名: 何銘川 </p><p> 學 號:
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> 所謂讀者寫者問題,是指保證一個writer進程必須與其他進程互斥地訪問共享對象的同步問題。</p><p> 讀者寫者問題可以這樣
4、的描述,有一群寫者和一群讀者,寫者在寫同一本書,讀者也在讀這本書,多個讀者可以同時讀這本書,但是,只能有一個寫者在寫書,并且,讀者必寫者優(yōu)先,也就是說,讀者和寫者同時提出請求時,讀者優(yōu)先。當讀者提出請求時需要有一個互斥操作,另外,需要有一個信號量S來當前是否可操作。</p><p> 信號量機制是支持多道程序的并發(fā)操作系統(tǒng)設(shè)計中解決資源共享時進程間的同步與互斥的重要機制,而讀者寫者問題則是這一機制的一個經(jīng)典范例
5、。</p><p> 與記錄型信號量解決讀者—寫者問題不同,信號量機制它增加了一個限制,即最多允許RN個讀者同時讀。為此,又引入了一個信號量L,并賦予初值為RN,通過執(zhí)行wait(L,1,1)操作,來控制讀者的數(shù)目,每當有一個讀者進入時,就要執(zhí)行wait(L,1,1)操作,使L的值減1。當有RN個讀者進入讀后,L便減為0,第RN+1 個讀者要進入讀時,必然會因wait(L,1,1)操作失敗而堵塞。對利用信號量來
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進程進入些,mx=1,reader進程就都可以進入讀。但是要一旦有Writer進程進入寫時,其MX=0,則任何reader進程就都無法進入讀。Swait(mx ,1,1,l,RN,0)語句表示僅當既無Write進程在寫(mx=1),又無reader進程在讀(L=RN)時,writer進程才能進入臨界區(qū)寫。</p>
11、<p> 本設(shè)計方案就是通過利用記錄型信號量對讀者寫者問題的解決過程進行模擬演示,形象地闡述記錄型信號量機制的工作原理。</p><p><b> 二、設(shè)計思路</b></p><p> 在Windows 7 環(huán)境下,創(chuàng)建一個包含n 個線程的控制臺進程。用這n 個線程來表示n個讀者或?qū)懻?。每個線程按相應(yīng)測試數(shù)據(jù)文件的要求,進行讀寫操作。請用信號量機
12、制分別實現(xiàn)讀者優(yōu)先和寫者優(yōu)先的讀者-寫者問題。</p><p> 讀者-寫者問題的讀寫操作限制:</p><p> 讀者-寫者的讀寫限制(包括讀者優(yōu)先和寫者優(yōu)先)</p><p> ⑴寫-寫互斥,即不能有兩個寫者同時進行寫操作</p><p> ?、谱x-寫互斥,即不能同時有一個讀者在讀,同時卻有一個寫者在寫</p><
13、;p> ⑶讀讀允許,即可以有2個以上的讀者同時讀</p><p> 將所有的讀者和所有的寫者分別放進兩個等待隊列中,當讀允許時就讓讀者隊列釋放一個或多個讀者,當寫允許時,釋放第一個寫者操作。讀者寫者問題的定義如下:有一個許多進程共享的數(shù)據(jù)區(qū),這個數(shù)據(jù)區(qū)可以是一個文件或者主存的一塊空間;有一些只讀取這個數(shù)據(jù)區(qū)的進程(Reader)和一些只往數(shù)據(jù)區(qū)寫數(shù)據(jù)的進程(Writer),此外還需要滿足以下條件:⑴任意
14、多個讀進程可以同時讀這個文件;⑵一次只有一個寫進程可以往文件中寫;⑶如果一個寫進程正在進行操作,禁止任何讀進程度文件。我們需要分兩種情況實現(xiàn)該問題:</p><p> 讀優(yōu)先:要求指一個讀者試圖進行讀操作時,如果這時正有其他讀者在進行操作,他可直接開始讀操作,而不需要等待。寫優(yōu)先:一個讀者試圖進行讀操作時,如果有其他寫者在等待進行寫操作或正在進行寫操作,他要等待該寫者完成寫操作后才開始讀操作,具體流程如下圖2.
15、1所示。</p><p> 圖2.1讀者—寫者總體流程框圖</p><p><b> 三、過程論述</b></p><p><b> ⑴概要設(shè)計</b></p><p><b> 程序由兩部分組成:</b></p><p> ?、僮x者-寫者模塊:
16、包括系統(tǒng)調(diào)用接口,讀者-寫者活動描述主程序。系統(tǒng)接口主要功能是通過管道向父進程發(fā)送系統(tǒng)調(diào)用命令,并讀取父進程送來的返回值。讀者-寫者活動程序根據(jù)臨界資源的共享,互斥原則編制,具體見源程序。</p><p> ②主控模塊:主控模塊實現(xiàn)系統(tǒng)初始化系統(tǒng)調(diào)用命令接收與解釋執(zhí)行,系統(tǒng)調(diào)用功能的實現(xiàn)(包括信號量機制),及讀者-寫者活動過程記錄與顯示。</p><p><b> 初始化系統(tǒng)
17、環(huán)境</b></p><p><b> 建立通信管道</b></p><p><b> 啟動讀者-寫者進程</b></p><p><b> 接收系統(tǒng)調(diào)用命令</b></p><p><b> 解釋執(zhí)行</b></p>&
18、lt;p><b> ?、圃敿氃O(shè)計</b></p><p> 為了實現(xiàn)讀者和寫者的讀寫過程,將每個讀者和每個寫者作為了一個單獨的線程,所以設(shè)置了兩個類,一個是讀者類Reader,一個是寫者類Writer.以讀者類為例:</p><p> 一個讀者的動作過程為由睡眠->等待->開始讀->結(jié)束讀->睡眠的一個循環(huán)過程,而一個寫者的動作過程也
19、為此.</p><p> 讀者調(diào)用方法Sleep()進行等待,調(diào)用Weakup()方法喚醒,最后在調(diào)用endReading()方法結(jié)束讀入,釋放運行空間.寫者同讀者.</p><p> 首先要實現(xiàn)睡眠的方法Sleep(),讀者和寫者在睡眠過程都應(yīng)該是一樣的,只是他們睡眠的時間不同,所以只需寫出一個方法;</p><p> 在方法中,控制線程休眠隨機的時間,由于
20、每個讀者或?qū)懻叨际且粋€線程,而每個讀者或?qū)懻咚麄児ぷ餍菝叩臅r間都不一定相同,他們請求工作的時間也不一定相同,所以取了隨機時間。</p><p> 其次設(shè)置了讀者的兩個方法,開始讀和結(jié)束讀,由于這只是個模擬讀寫問題,所以只需要知道結(jié)果就行,就不用顯示出他是怎么讀的。</p><p> 在開始讀中,當有寫者在寫時,讀者需要等待wait(),在沒有人在工作時,如果有寫者和讀者同時請求,那么就
21、讓寫者先進,這是寫者優(yōu)先。所以這就歸納于一種情況, 當讀者布爾變量為FALSE時,如果有需要工作的寫者,那么讀者就等待。當讀者請求讀入后,計數(shù)有多少讀者需要工作的變量readerCount +1,如果這是第一個進入工作的讀者就需要將顯示是否有讀者在工作的讀者布爾變量變?yōu)門RU –E。具體流程如下圖3.1、3.2所示。</p><p> 圖3.1創(chuàng)建寫者進程
22、 圖3.2創(chuàng)建讀者進程</p><p><b> 四、結(jié)果分析</b></p><p> ?、艤y試數(shù)據(jù)文件格式:</p><p> 測試數(shù)據(jù)文件包括n 行測試數(shù)據(jù),分別描述創(chuàng)建的n 個線程是讀者還是寫者,以及讀寫操作的開始時間和持續(xù)時間。每行測試數(shù)據(jù)包括四個字段,各字段間用空格分隔。第一字段為一個正整數(shù),表示線程序號。第二字段表示相應(yīng)線程角
23、色,R 表示讀者是,W 表示寫者。第三字段為一個正數(shù),表示讀寫操作的開始時間。線程創(chuàng)建后,延時相應(yīng)時間(單位為秒)后發(fā)出對共享資源的讀寫申請。第四字段為一個正數(shù),表示讀寫操作的持續(xù)時間。當線程讀寫申請成功后,開始對共享資源的讀寫操作,該操作持續(xù)相應(yīng)時間后結(jié)束,并釋放共享資源。</p><p><b> ?、茰y試結(jié)果:</b></p><p> 在讀者寫者同時在隊列中
24、等待申請資時,讀者優(yōu)先調(diào)用資源。而且如果一個讀者申請進行讀操作時已有另一讀者正在進行讀操作,則該讀者可直接開始讀操作,即讀讀允許。</p><p> 進程1是W操作,在時間3時進入隊列,運行時間是5,在它進入時沒有進程占用資源,它既占用資源;知道它釋放資源,等候的進程有3,4,5,具體表現(xiàn)如下圖4.1、圖4.2所示;</p><p> 圖4.1進程1進入圖</p><
25、;p> 圖4.2進程1完成圖</p><p> 進程2是R操作,在時間16時進入隊列,運行時間是5,在它進入時進程4占用資源,它等待資源,當4釋放時占用資源,具體表現(xiàn)如下圖4.3、圖4.4所示;</p><p> 圖4.3進程2進入圖</p><p> 圖4.4進程2完成圖</p><p> 進程3是R操作,在時間5時進入隊列
26、,運行時間是2,在它進入時進程1占用資源,它等待資源,當進程1釋放資源后,由于讀者優(yōu)先,進程3,5同時調(diào)運資源,具體表現(xiàn)如下圖4.5、圖4.6所示;</p><p> 圖4.5進程3進入圖</p><p> 圖4.6進程3完成圖</p><p> 進程4是W操作,在時間6時進入隊列,運行時間是5,在它進入時進程1占用資源,它等待資源,當進程1釋放資源后,由于讀
27、者優(yōu)先,進程3,5占用資源,它依然等待,直到進程3,5都結(jié)束,具體表現(xiàn)如下圖4.7、圖4.8所示;</p><p> 圖4.7進程4進入圖</p><p> 圖4.8進程4完成圖</p><p> 進程5是R操作,在時間4時進入隊列,運行時間是3, 在它進入時進程1占用資源,它等待資源,當進程1釋放資源后,由于讀者優(yōu)先,進程3,5同時調(diào)運資源,具體表現(xiàn)如下圖4
28、.9、圖4.10所示;</p><p> 圖4.9進程5進入圖</p><p> 圖4.10進程5完成圖</p><p> 進程6是R操作,在時間17時進入隊列,運行時間是7,在它進入時進程2占用資源,它等待進程2釋放后最后調(diào)用資源,具體表現(xiàn)如下圖4.11所示。</p><p> 圖4.11進程6進入圖</p><
29、p><b> 五、總結(jié)</b></p><p> 本次操作系統(tǒng)課程設(shè)計我們小組完成的是讀者寫者問題,通過學習信號量機制,我們對其的同步與互斥機制有了很深掌握并認識到同步與互斥可以保證在一個時間內(nèi)只有一個線程對某個資源有控制權(quán)。共享資源包括全局變量、公共數(shù)據(jù)成員或者句柄等。同步還可以使得有關(guān)聯(lián)交互作用的代碼按一定的順序執(zhí)行。</p><p> 總體來說我認為
30、操作系統(tǒng)這門學科在計算機科學當是中非常重要的。他將我們學過的編程語言聯(lián)系起來,可以說是第一次利用C語言利用windows的API與系統(tǒng)進行“溝通”。 </p><p> 總而言之,這次操作系統(tǒng)的課程設(shè)計收獲頗豐,復(fù)習了許多東西,也從新學會了許多東西。我想這也許就是課程設(shè)計的最終目的吧。</p><p><b> 第二部分:參考文獻</b></p&g
31、t;<p> 1.譚浩強.C++程序設(shè)計[M].清華大學出版社,2004</p><p> 2.湯子瀛. 計算機操作系統(tǒng)[M]. 西安電子科技大學出版社. 2006.9</p><p> 3.劉振安、劉燕君著.C++程序設(shè)計課程設(shè)計[M].機械工業(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].機械工業(yè)出版社,2004</p><p> 第三部分:指導(dǎo)教師評語</p><p><b> 第四部分:成績評定</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;//進程類型(讀寫)</p><p> int m_nStartTime;//開始時間</p><p> int
37、 m_nWorkTime;//運行時間</p><p> int m_nID;//進程號</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ù)</p><p> int g_PersonLists[] = {//進程隊列</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;//申請寫進程的個數(shù)</p><
40、;p> HANDLE g_hReadSemaphore;//讀者信號</p><p> HANDLE g_hWriteSemaphore;//寫者信號</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)建信號燈,當前可用的資源數(shù)為1,最大為100</p><p> g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL); //創(chuà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);//此時沒有讀者,可以寫</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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 讀者寫者課程設(shè)計
- 操作系統(tǒng)課程設(shè)計-讀者寫者問題
- 操作系統(tǒng)課程設(shè)計--讀者寫者問題
- 操作系統(tǒng)課程設(shè)計——讀者寫者問題
- 操作系統(tǒng)課程設(shè)計---讀者-寫者問題實現(xiàn)
- 讀者與寫者-操作系統(tǒng)課程設(shè)計實驗報告
- 操作系統(tǒng)原理課程設(shè)計讀者-寫者問題的實現(xiàn)
- 操作系統(tǒng)課程設(shè)計-- linux下讀者與寫者的問題實現(xiàn)
- 讀者寫者問題_寫者優(yōu)先參考答案
- 讀者寫者問題-操作系統(tǒng)實驗報告
- 操作系統(tǒng)課程設(shè)計報告-讀者寫著問題
- 《操作系統(tǒng)》課程設(shè)計--基于信號量與pv操作同步機制的讀者寫者問題的設(shè)計與實現(xiàn)
- 北理工操作系統(tǒng)實驗二讀者寫者問題
- 迷宮問題課程設(shè)計報告
- 迷宮問題課程設(shè)計報告
- 迷宮問題課程設(shè)計報告
- 迷宮問題課程設(shè)計報告
- 迷宮問題課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計迷宮問題課程設(shè)計報告
- 跳舞搭配問題課程設(shè)計報告
評論
0/150
提交評論