實(shí)驗(yàn)二讀者寫(xiě)者問(wèn)題實(shí)驗(yàn)報(bào)告_第1頁(yè)
實(shí)驗(yàn)二讀者寫(xiě)者問(wèn)題實(shí)驗(yàn)報(bào)告_第2頁(yè)
實(shí)驗(yàn)二讀者寫(xiě)者問(wèn)題實(shí)驗(yàn)報(bào)告_第3頁(yè)
實(shí)驗(yàn)二讀者寫(xiě)者問(wèn)題實(shí)驗(yàn)報(bào)告_第4頁(yè)
實(shí)驗(yàn)二讀者寫(xiě)者問(wèn)題實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

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

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

6、作!為了實(shí)現(xiàn)對(duì)全局變量writecount的互斥訪問(wèn),設(shè)置了一個(gè)互斥對(duì)象Mutex3o為了實(shí)現(xiàn)寫(xiě)者優(yōu)先,設(shè)置一個(gè)臨界區(qū)對(duì)象read,當(dāng)有寫(xiě)者在寫(xiě)或等待時(shí),讀者 必須阻塞在臨界區(qū)對(duì)象read上。讀者除了要一個(gè)全局變量readcount實(shí)現(xiàn)操作上的互斥外,還需要一個(gè)互斥對(duì) 象對(duì)阻塞在read這一個(gè)過(guò)程實(shí)現(xiàn)互斥,這兩個(gè)互斥對(duì)象分別為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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論