




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、計算機與信息學(xué)院操作系統(tǒng)課程設(shè)計報告開題報告1.2.3.4.5.該項課程設(shè)計的意義; 更加深入的了解讀者寫者問題的算法; 加深對線程,進程的理解; 加深對“線程同步”概念的理解,理解并應(yīng)用“信號量機制” 熟悉計算機對處理機的管理,了解臨界資源的訪問方式; 了解 C+ 中線程的實現(xiàn)方式,研讀API。) 課程設(shè)計的任務(wù)多進程 /線程編程:讀者 -寫者問題。 設(shè)置兩類進程 /線程,一類為讀者, 隨機啟動讀者或?qū)懻撸?顯示讀者或?qū)懻邎?zhí)行狀態(tài); 隨著進程 /線程的執(zhí)行,更新顯示;一類為寫者;三) 相關(guān)原理及算法描述;整體概況:該程序從大體上來分只有兩個模塊,即“讀者優(yōu)先”和“寫者優(yōu)先”模塊讀者優(yōu)先:如果
2、沒有寫者正在操作,則讀者不需要等待,用一個整型變量 readcount 記錄 讀者數(shù)目,用于確定是否釋放讀者線程, readcount 的初值為 0.當(dāng)線程開始調(diào)入時 . 每個讀者準(zhǔn)備讀 . 等待互斥信號 ,保證對 readcount 的訪問 ,修改互斥 .即 readcount+. 而當(dāng)讀者線程進行讀操作時 ,則讀者數(shù)目減少 (readcount-). 當(dāng) readcout=0 時,說明所 有的讀者都已經(jīng)讀完,離開臨界區(qū)喚醒寫者 (LeaveCriticalSection(&RP_Write);), 放互斥信號 (ReleaseMutex(h_Mutex).還需要一個互斥對象 mutex 來
3、實現(xiàn)對全局變量 Read_count 修改時的互斥 . 外,為了實現(xiàn)寫 -寫互斥,需要增加一個臨界區(qū)對象Write 。當(dāng)寫者發(fā)出寫請求時,必須申請臨界區(qū)對象的所有權(quán)。通過這種方法,可以實現(xiàn)讀-寫互斥, Read_count=1 時(即第一個讀者到來時) ,讀者線程也必須申請臨界區(qū)對象的所有 權(quán)寫者優(yōu)先:寫者優(yōu)先與讀者不同之處在于一旦一個寫者到來,它應(yīng)該盡快對文件進行寫 操作, 如果有一個寫者在等待, 則新到來的讀者不允許進行讀操作。 為此應(yīng)當(dāng)填加 一個整形變量 write_count ,用于記錄正在等待的寫者的數(shù)目, write_count 的初值 為 0.當(dāng)線程開始調(diào)入時 . 只允許一個寫者
4、準(zhǔn)備讀 . 等待互斥信號 ,保證對 write_count 的訪問 , 修改互斥 . 即 write_count+. 而當(dāng)寫者線程進行讀操作時,則相應(yīng)寫者數(shù)目減少(wnte_count-).當(dāng)write_count=O時,說明所有的讀者都已經(jīng)讀完,離開臨界區(qū)喚醒讀者 , 釋放互斥信號 .為了實現(xiàn)寫者優(yōu)先,應(yīng)當(dāng)填加一個臨界區(qū)對象read,當(dāng)有寫者在寫文件或等待時,讀者必須阻塞在 read 上。四)開發(fā)環(huán)境;VC+6.0五)預(yù)期設(shè)計目標(biāo);讀者-寫者問題的讀寫操作限制(包括讀者優(yōu)先和寫者優(yōu)先)1. 寫-寫互斥:不能有兩個寫者同時進行寫操作2. 讀-寫互斥:不能同時有一個線程在讀,而另一個線程在寫。3
5、. 讀-讀允許:可以有一個或多個讀者在讀。若讀者的優(yōu)先權(quán)比寫者高 , 如果讀者申請進行讀操作時已有另一個讀者正在 進行讀操作,則該讀者可直接開始讀操作.不必經(jīng)過別的操件若讀者的優(yōu)先權(quán)比寫者高 ,如果第一個寫者已經(jīng)占有了文件的時候.則別的讀者必需等待該操作完成后 .才能開始讀操作 .若寫者的優(yōu)先權(quán)比讀者高 , 在一個寫者提出要訪問文件時, 就必須使其盡可能 的得到文件,而且不用調(diào)配。完成課程設(shè)計的任務(wù),實現(xiàn)讀者寫者問題的全部要求,同時可以實現(xiàn)“讀者 優(yōu)先”和“寫者優(yōu)先”兩種情況,有時間的話,爭取實現(xiàn)可視化圖形界面。課程設(shè)計報告一) 課程設(shè)計任務(wù)、要求、目的;任務(wù)和要求:多進程 /線程編程:讀者
6、-寫者問題。設(shè)置兩類進程 /線程,一類為讀者,一類為寫者; 隨機啟動讀者或?qū)懻撸?顯示讀者或?qū)懻邎?zhí)行狀態(tài);隨著進程 /線程的執(zhí)行,更新顯示;更加深入的了解讀者寫者問題的算法; 加深對線程,進程的理解; 加深對“線程同步”概念的理解,理解并應(yīng)用“信號量機制” 熟悉計算機對處理機的管理,了解臨界資源的訪問方式; 了解C+中線程的實現(xiàn)方式,研讀API。目的:1234) 原理及算法描述;寫者優(yōu)先原理圖:5讀者優(yōu)先原理圖:算法描述:讀者優(yōu)先的附加限制:如果讀者申請進行讀操作時已有另一個讀者正在進行讀 操作,則該讀者可直接開始讀操作。寫者優(yōu)先的附加限制:如果一個讀者申請進行讀操作時已有另一個寫者在等待 訪
7、問共享資源,則該讀者必須等到?jīng)]有寫者處于等待狀態(tài)后才能開始讀操作。(三)開發(fā)環(huán)境;VC+6.0(四) 重要算法和設(shè)計思路描述;整體概況:該程序從大體上來分只有兩個模塊,即“讀者優(yōu)先”和“寫者優(yōu)先”模塊讀者優(yōu)先:如果沒有寫者正在操作,則讀者不需要等待,用一個整型變量readco unt記錄讀者數(shù)目,用于確定是否釋放讀者線程,readcount的初值為0.當(dāng)線程開始調(diào)入時.每個讀者準(zhǔn)備讀.等待互斥信號,保證對readcount的訪問,修改互斥.即readcount+. 而當(dāng)讀者線程進行讀操作時 ,則讀者數(shù)目減少(readcount-).當(dāng)readcout=0時,說明所 有的讀者都已經(jīng)讀完,離開臨界
8、區(qū)喚醒寫者 (LeaveCriticalSection(&RP_Write);), 放互斥信號 (ReleaseMutex(h_Mutex).還需要一個互斥對象 mutex 來實現(xiàn)對全局變量 Read_count 修改時的互斥 . 外,為了實現(xiàn)寫 -寫互斥,需要增加一個臨界區(qū)對象Write 。當(dāng)寫者發(fā)出寫請求時,必須申請臨界區(qū)對象的所有權(quán)。通過這種方法,可以實現(xiàn)讀-寫互斥, Read_count=1 時(即第一個讀者到來時) ,讀者線程也必須申請臨界區(qū)對象的所有 權(quán)寫者優(yōu)先:寫者優(yōu)先與讀者不同之處在于一旦一個寫者到來,它應(yīng)該盡快對文件進行寫 操作, 如果有一個寫者在等待, 則新到來的讀者不允許
9、進行讀操作。 為此應(yīng)當(dāng)填加 一個整形變量 write_count ,用于記錄正在等待的寫者的數(shù)目, write_count 的初值 為 0.當(dāng)線程開始調(diào)入時 . 只允許一個寫者準(zhǔn)備讀 . 等待互斥信號 ,保證對 write_count 的訪問 ,修改互斥 .即 write_count+. 而當(dāng)寫者線程進行讀操作時,則相應(yīng)寫者數(shù)目減少(wnte_count-).當(dāng)write_count=O時,說明所有的讀者都已經(jīng)讀完,離開臨界區(qū)喚醒讀者 ,釋放互斥信號 .為了實現(xiàn)寫者優(yōu)先,應(yīng)當(dāng)填加一個臨界區(qū)對象read,當(dāng)有寫者在寫文件或等待時,讀者必須阻塞在 read 上。五) 程序?qū)崿F(xiàn) -數(shù)據(jù)結(jié)構(gòu);相關(guān) W
10、indowsAPI 說明 :CreateThread: 創(chuàng)建一個在調(diào)用進程的地址空間中執(zhí)行的線程。ExitThreadSleep: 對指定的時間間隔掛起當(dāng)前的執(zhí)行線程CreateMutex: 創(chuàng)建有名或者無名的互斥對象ReleaseMutex:WaitForSingleObject: 當(dāng)發(fā)生 (1) 指定對象處于信號態(tài) (2)超時 則該函數(shù)返回 WaitForMultipleObject: 任意一個或全部指定對象處于信號態(tài)或超時間隔已過 時,返回CreateSemapore: 創(chuàng)建一個有名或無名信號對象。ReleaseSemapore:InitializeCriticalSection: 初始
11、化臨界區(qū)對象EnterCriticalSection: 等待指定臨界區(qū)對象的所有權(quán)。 當(dāng)調(diào)用線程被賦予所有權(quán) 時,返回。LeaveCriticalSection: 該函數(shù)釋放指定臨界區(qū)對象的所有權(quán)。六)程序?qū)崿F(xiàn) -程序清單;#include /#include /#include /#include /#include /#include #includeusing namespace std;#define#define#define#defineMAX_PERSONREADERWRITEREND/#define/#define100 /最多 100 人0 /讀者1 /寫者-1 /結(jié)束REA
12、DERWRITERtypedef structHANDLE m_hThread;/ 定義處理線程的句柄 intintintintTy pe;/進程類型(讀寫)StartTime;/開始時間 WorkTime;/運行時間 ID;/進程號Person;Person PersonsMAX_PERSON;intlongNumOfPerson = 0;CurrentTime= 0;/ 基本時間片數(shù)intPersonLists = / 進程隊列1, WRITER, 3, 5,2, WRITER, 16, 5,3, READER, 2, 2,4, WRITER, 6, 5,5, READER, 4, 3,6
13、, READER, 17,7, END,;intNumOfReading = 0;NumOfWriteRequest = 0;/ 申請寫進程的個數(shù)intHANDLE ReadSemaphore;/ 讀者信號 HANDLE WriteSemaphore;/ 寫者信號 bool finished = false; / 所有的讀完成 /bool wfinished = false; / 所有的寫完成CreatePersonList(int *pPersonList);CreateReader(int StartTime,int WorkTime,int ID); CreateWriter(int S
14、tartTime,int WorkTime,int ID); DWORD WINAPI ReaderProc(LPVOID lpParam);void boolboolDWORD WINAPI WriterProc(LPVOID lpParam);int main()ReadSemaphore = CreateSemaphore(NULL,1,100,NULL); / 創(chuàng)建信號量,當(dāng)前可用的資源數(shù)為1,最大為 100/*HANDLE CreateSemaphore(LPSECURITY_A TTRIBUTES /lpSemaphoreAttributes 為安全屬性LONG lInitialC
15、ount,Sema phore的初始值LONG lMaximumCount,為最大值lpSemaphoreAttributes,/lInitialCount 為/lMaximumCount/lpName 為創(chuàng)建信號量, 當(dāng)前可LPCTSTR lpNameSemaphore 對象的名字, NULL 表示創(chuàng)建匿名 Semaphore);*/WriteSemaphore = CreateSemaphore(NULL,1,100,NULL); / 用的資源數(shù)為 1,最大為 100CreatePersonList(PersonLists); / 創(chuàng)建所有讀者寫者cout 創(chuàng)建所有的讀者寫者 n.n;Cu
16、rrentTime = 0;while(true)CurrentTime+;Sleep(300); / 300 mscout 當(dāng)前時間 = CurrentTime= MAX_PERSON) return false;Person *pPerson = &PersonsNumOfPerson; pPerson-ID = ID;pPerson-StartTime = StartTime; pPerson-WorkTime = WorkTime;pPerson-Type = READER; NumOfPerson+;/ 新建進程 pPerson-m_hThread=CreateThread(NULL
17、,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID);/*HANDLE CreateThread(LPSECURITY_A TTRIBUTES lpThreadAttributes, / pointer to security attributes 安全屬性/ initial thread stack sizeDWORD dwStackSize, 堆棧大小/ pointer to threadLPTHREAD_START_ROUTINE lpStartAddress,/ argument for new thread/ creation flags/ poi
18、nter to receive threadfunction 函數(shù)指針 LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadIdID);*/if(pPerson-m_hThread = NULL) return false;return true;bool CreateWriter(int StartTime,int WorkTime,int ID) DWORD dwThreadID; if(NumOfPerson = MAX_PERSON)return false;Person *pPerson = &PersonsNumOf
19、Person; pPerson-ID = ID;pPerson-StartTime = StartTime; pPerson-WorkTime = WorkTime; pPerson-Type = WRITER;NumOfPerson+;/ 新建進程 pPerson-m_hThread=CreateThread(NULL,0,WriterProc,(LPVOID)pPerson,0,&dwThreadID);/*HANDLE CreateThread(LPSECURITY_A TTRIBUTES lpThreadAttributes, / pointer to security attribu
20、tes 安全屬性/ initial thread stack sizeDWORD dwStackSize, 堆棧大小/ pointer to thread/ argument for new thread/ creation flags/ pointer to receive threadLPTHREAD_START_ROUTINE lpStartAddress, function 函數(shù)指針LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadIdID);*/ if(pPerson-m_hThread = NULL) return f
21、alse;return true;DWORD WINAPI ReaderProc(LPVOID lpParam)/ 讀過程Person *pPerson = (Person *)lpParam;/ 等待啟動時間 while(CurrentTime != pPerson-StartTime)/讀操作還沒有到達執(zhí)行時間,則等待printf(Reader %d is Requesting .n,pPerson-ID); printf(nn*n);/等待寫者請求 /該語句在寫者優(yōu)先的時候是認(rèn)為寫者優(yōu)先級高于讀者,在有寫者的時候讀者 需要等候, 而在讀者優(yōu)先的時候, 不用判斷是否存在寫者, 有讀者時即開
22、始讀操作。while(NumOfWriteRequest != 0) /NumOfWriteRequest != 0 表示有寫者在等待,不能讀/ 等待 ReadSemaphore 讀信號 ,即當(dāng) ReadSemaphore 有信號時等待結(jié)束, 相當(dāng)于 p 操作WaitForSingleObject(ReadSemaphore,INFINITE);/ pointer to the object-handle array / time-out interval in milliseconds/*DWORD WaitForMultipleObjects( CONST HANDLE *lpHandle
23、s, DWORD dwMilliseconds);*/ if(NumOfReading = 0) /當(dāng)?shù)谝粋€讀者到了, 如果 WriteSemaphore 信號燈滅了, 說明有寫者在寫, 讀者必須等待,即互斥寫操作WaitForSingleObject(WriteSemaphore,INFINITE); NumOfReading+;V 操作/lpReleaseCount 參數(shù)表示要增加的數(shù)值/還有讀者,但是允許下一個讀進程讀取,相當(dāng)于 ReleaseSemaphore(ReadSemaphore,1,NULL); /*BOOL ReleaseSemaphore( HANDLE hSemapho
24、re,/lpPreviousCount 參數(shù)用于返回之前的計LONG lReleaseCount, 算值,如果不需要可以設(shè)置為 NULLLPLONG lpPreviousCount);*/ 啟動讀者 pPerson-StartTime = CurrentTime;printf(Reader %d is Reading the Critical Section.n,pPerson-ID); printf(nn*n); while(CurrentTime StartTime + pPerson-WorkTime) / . 執(zhí)行讀操作 printf(Reader %d is Exit.n,pPers
25、on-ID); printf(nn*n); WaitForSingleObject(ReadSemaphore,INFINITE);NumOfReading-; if(NumOfReading = 0) ReleaseSemaphore(WriteSemaphore,1,NULL);/ 此時沒有讀者,可以寫 ReleaseSemaphore(ReadSemaphore,1,NULL); if(pPerson-ID = 6 ) finished = true; / 所有的讀寫完成 ExitThread(0);return 0;DWORD WINAPI WriterProc(LPVOID lpParam)Person *pPerson = (Person *)lpParam;/ 等待啟動時間 while(CurrentTime != pPerson-StartTime) printf(Writer %d is Requesting .n,pPerson-ID); printf(nn*n);NumOfWriteRequest+; /在寫者優(yōu)先的時候需要用自加來初始信號值,而在讀者優(yōu)先的時是通過讀者 操作來控制信號值WaitForSingleObject(WriteSemaphore,INFINITE);/ 啟動寫
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 識字1教學(xué)課件
- 2024-2025學(xué)年安徽省江南十校高一下學(xué)期5月份聯(lián)考政治試題及答案
- 江蘇省徐州市2024-2025學(xué)年高一下學(xué)期期末考試歷史試卷
- 多通道情感狀態(tài)感知技術(shù)
- 無人機應(yīng)用技術(shù)4.14.影響無人機航拍的因素(棚拍)
- 無人機應(yīng)用技術(shù)3.4.室內(nèi)編隊飛行起飛前命令介紹
- AI大模型原生數(shù)據(jù)經(jīng)營分析決策平臺建設(shè)方案
- 政治中考代表題目及答案
- 2025至2030年中國紅外線理療燈行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國汽車輪胎智能安全預(yù)警系統(tǒng)行業(yè)投資前景及策略咨詢報告
- 2025至2030中國糠酸行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 江西省上饒市廣信區(qū)2023-2024學(xué)年七年級下學(xué)期6月期末考試數(shù)學(xué)試卷(含答案)
- 糖尿病病人胰島素治療講課件
- 高壓氣體絕緣設(shè)備中SF6分解產(chǎn)物檢測SO2傳感器的設(shè)計與應(yīng)用
- poct科室管理制度
- 溝通與表達講課件
- 0號柴油安全技術(shù)說明書SDS
- GA/T 1454-2018信息安全技術(shù)網(wǎng)絡(luò)型流量控制產(chǎn)品安全技術(shù)要求
- 中小學(xué)生防溺水安全教育PPT課件【愛生命防溺水】
- 礦山開采承包合同參考
- GA∕T 743-2016 閃光警告信號燈
評論
0/150
提交評論