實驗二讀者寫者問題實驗報告_第1頁
實驗二讀者寫者問題實驗報告_第2頁
實驗二讀者寫者問題實驗報告_第3頁
實驗二讀者寫者問題實驗報告_第4頁
實驗二讀者寫者問題實驗報告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實驗二讀者寫者問題實驗報告CKBOOD was revised in the early morning of December 17, 2020.實驗二讀者寫者 問題實驗報告一、實驗目的Windows2000/XP 提供了 互斥量(mutex)、信號量(semapore)、事件(event)等三 種同步對象和相應的系統(tǒng)調用,用于線程的互斥與同步。通過對讀者寫者問題的調 試,了解Windows2000/XP中的同步機制。二、實驗內容及實驗步驟利用Windows2000/XP信號量機制,實現(xiàn)讀者寫者問題。在Windows 2000環(huán)境下,創(chuàng)建一個控制臺進程,此進程包含n個線程。用這n 個線程來表

2、示n個讀者或寫者。每個線程按相應測試數(shù)據(jù)文件(后面有介紹)的要 求進行讀寫操作。用信號量機制分別實現(xiàn)讀者優(yōu)先和寫者優(yōu)先的讀者-寫者問題。讀者-寫者問題的讀寫操作限制(包括讀者優(yōu)先和寫者優(yōu)先):寫-寫互斥,即不能有兩個寫者同時進行寫操作。讀-寫互斥,即不能同時有一個線程在讀,而另一個線程在寫。讀-讀允許,即可以有一個或多個讀者在讀。讀者優(yōu)先的附加限制:如果一個讀者申請進行讀操作時已有另一個讀者正在進 行讀操作,則該讀者可直接開始讀操作。寫者優(yōu)先的附加限制:如果一個讀者申請進行讀操作時已有另一寫者在等待訪 問共亨資源,則該讀者必須等到沒有寫者處于等待狀態(tài)才能開始讀操作。運行結果顯示要求:要求在每個

3、線程創(chuàng)建、發(fā)出讀寫操作申請、開始讀寫操作 和結果讀寫操作時分別顯示一行提示信息,以確定所有處理都遵守相應的讀寫操作 限制。三、實驗結果及分析圖選擇界面第一字段為一個正整數(shù),表示線程序號。第二字段表示相應線程角色,R表示讀者 是,W表示寫者。第三字段為一個正數(shù),表示讀寫操作的開始時間。線程創(chuàng)建后, 延時相應時間(單位為秒)后發(fā)出對共享資源的讀寫申請。第四字段為一個正數(shù), 表示讀寫操作的持續(xù)時間。當線程讀寫申請成功后,開始對共亨資源的讀寫操作, 該操作持續(xù)相應時間后結束,并釋放共享資源。下面是一個測試數(shù)據(jù)文件的例 子:1 R 3 52 W 4 53 R 5 24 R 6 5測試結果如下:圖讀者優(yōu)先

4、運行結果圖寫者優(yōu)先運行結果分析如下:將所有的讀者和所有的寫者分別放進兩個等待隊列中,當讀允許時就讓讀者隊 列釋放一個或多個讀者,當寫允許時,釋放第一個寫者操作。讀者優(yōu)先:如果沒有寫者正在操作,則讀者不需要等待,用一個整型變量readcount記錄 當前的讀者數(shù)目,用于確定是否釋放寫者線程,(當readcout=0時,說明所有的 讀者都已經讀完,釋放一個寫者線程),每個讀者開始讀之前都要修改 readcount,為了互斥的實現(xiàn)對readcount的修改,需要一個互斥對象Mutex來實 現(xiàn)互斥。另外,為了實現(xiàn)寫-寫互斥,需要一個臨界區(qū)對象write,當寫者發(fā)出寫的請求 時,必須先得到臨界區(qū)對象的所

5、有權。通過這種方法,可以實現(xiàn)讀寫互斥,當 readcount二1時,(即第一個讀者的到來時,),讀者線程也必須申請臨界區(qū)對象 的所有權.當讀者擁有臨界區(qū)的所有權,寫者都阻塞在臨界區(qū)對象write上。當寫者擁有 臨界區(qū)對象所有權時,第一個判斷完readcount二二1后,其余的讀者由于等待對readcount的判斷,阻塞在Mutex上!寫者優(yōu)先:寫者優(yōu)先和讀者優(yōu)先有相同之處,不同的地方在:一旦有一個寫者到來時,應 該盡快讓寫者進行寫,如果有一個寫者在等待,則新到的讀者操作不能讀操作,為 此添加一個整型變量writecount,記錄寫者的數(shù)目,當writ ecount=0時才可以釋 放讀考進行讀操

6、作!為了實現(xiàn)對全局變量writecount的互斥訪問,設置了一個互斥對象Mutex3o為了實現(xiàn)寫者優(yōu)先,設置一個臨界區(qū)對象read,當有寫者在寫或等待時,讀者 必須阻塞在臨界區(qū)對象read上。讀者除了要一個全局變量readcount實現(xiàn)操作上的互斥外,還需要一個互斥對 象對阻塞在read這一個過程實現(xiàn)互斥,這兩個互斥對象分別為mutexl和 mutex2o附:源代碼如下:ttinclude ttinclude ttinclude ttinclude ttinclude ttinclude ttinclude ttdefine READER Rnz,, m_serial);nz,, m_seri

7、al);Sleep(m_persist);nz,, m_serial);n, m_serial);n,z, m_serial);Sleep(m_persist);n,z, m_serial);erial;inFilethread_infon_thread entity;inFilethread_infon_thread delay;inFilethread infon thread+persist;for (int i=0;iCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) (RP_ReaderThread),&thread_info _i, 0,

8、&thread_ID); n);n,z, m_serial);wait_for_mutexl二 WaitForSingleOb ject (h_Mutexl, -1);n,z, m_serial);Sleep(m_persist);n,z, m_serial);n, m_serial);n,z, mserial);Sleep(m_persist);nfy m_serial);erial;inFilethread_infon_thread entity;inFilethread_infon_thread delay;inFilethread_infon_thread+ persist;();fo

9、r (int 1=0;i (int)(n_thread);i+)if (thread_infoi. entity二二READERthread_infoi. entity二二R)n);/ /主函數(shù)int main(int argc, char* argvLJ) char ch;while (true)/打印提示信息printf (1:Reader Prioritynz,):printf (“2:Writer PriorityXn);printf (3:Exit Priorityn);printf (Enter your choice (1,2 or 3): “);/如果輸入信息不正確,繼續(xù)輸入doch (char) _getch (); while (ch !二 T &ch !二 2 & ch !二 3);systemCcls);/選擇3,返回辻(ch二二3)retuirn 0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論