




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、多線程讀者寫者優(yōu)先實(shí)驗(yàn)報(bào)告1、熟悉多線程編程2、熟悉使用信號(hào)量機(jī)制解決進(jìn)程同步問(wèn)題二、在Windows 2000環(huán)境下,創(chuàng)建一個(gè)包含n個(gè)線程的控制臺(tái)進(jìn)程。用這n個(gè)線程來(lái)表示n個(gè)讀者或?qū)懻摺C總€(gè)線程按相應(yīng)測(cè)試數(shù)據(jù)文件的要求,進(jìn)行讀寫操作。 請(qǐng)用信號(hào)量機(jī)制分別實(shí)現(xiàn)讀者優(yōu)先和寫者優(yōu)先的讀者-寫者問(wèn)題。讀者優(yōu)先:如果一個(gè)讀者申請(qǐng)進(jìn)行讀操作時(shí)已有另一讀者正在進(jìn)行讀操作,則該讀者可直接開始讀操作。寫者優(yōu)先:如果一個(gè)讀者申請(qǐng)進(jìn)行讀操作時(shí)已有另一寫者在等待訪問(wèn)共享資源,則該讀者必須等到?jīng)]有寫者處于等待狀態(tài)后才能開始讀操作。1、為每個(gè)學(xué)生提供一臺(tái)具有WINDOWS 2000/NT/XP操作系統(tǒng)的訃算機(jī);2、實(shí)驗(yàn)
2、機(jī)器要求安裝Visual C+ 6.0編程平臺(tái);3、實(shí)驗(yàn)要求一人一機(jī)。1、要求在每個(gè)線程創(chuàng)建、發(fā)出讀寫操作申請(qǐng)、開始讀寫操作和結(jié)束讀寫操作時(shí)分別顯示一行提示信息,以確信所有處理都遵守相應(yīng)的讀寫操作限制。2、測(cè)試數(shù)據(jù)文件格式:測(cè)試數(shù)據(jù)文件包括n行測(cè)試數(shù)據(jù),分別描述創(chuàng)建的n 個(gè)線程是讀者還是寫者,以及讀寫操作的開始時(shí)間和持續(xù)時(shí)間。每行測(cè)試數(shù)據(jù)包括 四個(gè)字段,各字段間用空格分隔。第一字段為一個(gè)正整數(shù),表示線程序號(hào)。第二字段表示相應(yīng) 線程角色,R表示讀者是,W表示寫者。第三字段為一個(gè)正數(shù),表示讀寫操作的開 始時(shí)間。線程創(chuàng)建后,延時(shí)相應(yīng)時(shí)間(單位為秒)后發(fā)出對(duì)共享資源的讀寫申請(qǐng)。笫四字段為一個(gè)正 數(shù),表
3、示讀寫操作的持續(xù)時(shí)間。當(dāng)線程讀寫申請(qǐng)成功后,開始對(duì)共享資源的讀寫操作,該操 作持續(xù)相應(yīng)時(shí)間后結(jié)束,并釋放共享資源。下面是一個(gè)測(cè)試數(shù)據(jù)文件的例子:1 R 3 52 W 4 53 R 5 24 R 6 53、若有可能請(qǐng)?jiān)趫D形方式下,將讀、寫者線程執(zhí)行情況用圖形動(dòng)畫顯示#include#include#include#include#include#includeftincludettdefine READER R 讀者ttdefine WRITER W 寫者define INTE_PER_SEC 1000 /定義每秒中斷的次數(shù) defineMAX_THREAD_NUM 64 定義最大線程數(shù) def
4、ine MAX_FILE_NUM 32 /定義最大文 件數(shù)目 define MAX_STR_LEN 32 /int readcount二0; /int writecount二0; /CRITICAL.SECTION RP_Write; 臨界資源 CRITICAL.SECTIONRP_Write_Reader; /臨界資源 int choice=0;struct Threadinfoint serial;/線程序號(hào)char entity;/線程類別double delay;/線程延遲時(shí)間,即開始時(shí)間double persist;/線程讀寫操作時(shí)間;void RP_ReaderThread (vo
5、id *p)HANDLE h.Mutex;/ HANDLE s.Mutex;/s_Mutex二OpenMutex (MUTEX_ALL_ACCESS, FALSE, z/mutex_for_readORwriter/z);h_Mutex二OpenMutex(MUTEX_ALL_ACCESS, FALSE, mutex_for_readcount); DWORD wait for mutex;DWORD m_delay;DWORD m_persist;int m_serial:m_se:rial二(Threadinfo*) (p) -serial;m_delay=(DWORD)(Threadin
6、fo*)(p)-delay * INTE_PER_SEC);m_persist=(DWORD)(Threadinfo*)(p)persist * INTE_PER_SEC);Sleep(m_delay);/printf (讀線程%d 發(fā)出請(qǐng)求.n, m_serial);cout 讀線程m_serial發(fā)出讀請(qǐng)求 endl;if (choice=l)EnterCriticalSection(&RP_Wr i t e_Reader);wait_for_mutex=WaitForSingleObject (h_Mutex,T);/ wait_for_mutex=WaitForSingleObject
7、(s_Mutex, T);if(readcount=0)EnterCriticalSection(&RP_Write);readcount+;ReleaseMutex(h_Mutex);if (choice=l)LeaveCriticalSection(&RP_Write_Reader);/ ReleaseMutex(s_Mutex);/printf (讀進(jìn)程紀(jì)開始讀文件.n, m_serial);coutz,讀線程m_serial開始讀文件,endl;Sleep(m_persist);/printf (讀進(jìn)程%d 結(jié)束讀文件.n, m_serial);cout,/讀線程,/m_serial/
8、,結(jié)束讀文件.,endl; wait_for_mutex=WaitForSingleObject (h_Mutex, T);readcount一一;if(readcount=0)LeaveCriticalSection(&RP_Write);ReleaseMutex(h_Mutex);void RP_WriteThread(void *p)DWORD m_delay;DWORD m_persist;int m_serial:/ HANDLE s.Mutex;/ DWORD wait for mutex;/ /s_Mutex二OpenMutex(MUTEX_ALL_ACCESS, FALSE,,
9、zmutex_f or_readORwr i ter; m_serial=(Threadinfo*)(p)-serial;m_delay=(DWORD)(Threadinfo*)(p)-delay*INTE_PER_SEC);m_persist= (DWORD) (Threadinfo*) (p)-persist*INTE_PER_SEC);Sleep(m_delay);cout,/寫進(jìn)程m_serial發(fā)出寫請(qǐng)求*,zendl;if (choice=l)EnterCriticalSection(&RP_Write_Reader);/ wait_for_mutex=WaitForSingleO
10、bject(s_Mutex, -1);EnterCriticalSection(&RP_Write);cout寫進(jìn)程m_serial開始寫文件,?endl;Sleep(m_persist);cout,/ 寫進(jìn)程m_serial結(jié)束寫文件endl;LeaveCriticalSection(&RP_Write);if (choice=l)LeaveCriticalSection(&RP_Write_Reader);/ ReleaseMutex(s_Mutex):void ReadPriority(char *file)DWORD n_thread=0;DWORD thread.ID:DWORD w
11、ait for all;HANDLE h.Mutex;HANDLE s.MUTEX;h_Mutex=CreateMutex (NULL, FALSE,,zmutex_for_readcount;s_NiUTEX=CreateMutex (NULL, FALSE,,zmutex_for_readerORwriter;HANDLE h_ThreadMAX_THREAD_NUM:Threadinfo thread_infoMAX_THREAD_NUM;readcountO;InitializeCriticalSection(&RP_Write);InitializeCriticalSection(&
12、RP_Write_Reader);ifstream inFile;inFile open(file);while(inFile)inFilethread_infoLn_thread serial; coutthread_info En_thread ser ial t;inFilethread_infon_threadj entity;coutthread_infon.thread ent ity tJ ;inFilethread_info En_threadJ delay; coutthread_info n.thread dela y, f ;inFilethread_infon_thre
13、adj persist; coutthread_infon_thread+ persist,t;inFile get ();coutendl;inFile close();for (int i=0;iCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) (RP.ReaderTh read), &thread_infoi, 0, &thread_ID);elseh_Threadi=Creat eThread(NULL, 0, (LPTHREAD_START_ROUTINE)(RP.WriteThread), &thread_infoi, 0, &threa
14、d_ID);wait_for_all=WaitForMultipleObjects (n_thread, h_Thread, TRUE, T);cout,z所有線程運(yùn)行完畢,endl;int main()int n;cout,/輸入你的選擇:nl :讀者優(yōu)先n2:讀者優(yōu)先n3:退出n,endl;cinn;while (n!=3)switch (n)case 1:choiceO;ReadPriority(1 txt):break;case 2:choice=l:ReadPriority(1 txt):break;default:break;cout,z輸入你的選擇:nl:讀者優(yōu)先n2:寫者優(yōu)先n3 :退出nendl; cinn;system(PAUSE);return 0;首先選擇讀者優(yōu)先,笫一次選擇,把讀入的文件信息輸出詵鋼3氓刃關(guān)儻許樓玄岳?一 一- 浜詫弓浜昏說(shuō)陜?cè)?R u R Rglgle3w3%F3一 Wn線線KB線線 2 3 4 h嵐後E詼詫E許lig浜h -r匕 4444r 爰克文事 ix弓可S詳壬 一久姑卞館k?r乞MX 貸為富tebA昌-3 說(shuō)一Ig.EMhJ-llshR:進(jìn)尢X常it優(yōu) 魯區(qū) 八著:S R : 選擇寫者優(yōu)先:B67發(fā)程社35發(fā)出詩(shī)常求愛出耳謚求U4gxtwi嵐僅來(lái)憂實(shí)驗(yàn)衍6K父桂U)MhHM隊(duì)盟.空/.BJLvlct- ”L 廣H-Ri-
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村合資合作建房合同范本
- 不標(biāo)準(zhǔn)水電施工合同范本
- 內(nèi)江小區(qū)保安合同范本
- 東亮駕照合同范本
- 兩方協(xié)議合同范本
- 買房假合同范例
- 農(nóng)村秸稈銷售合同范本
- 合同范本押金退還
- 化工重苯銷售合同范例
- 卡車購(gòu)車合同范本
- 無(wú)人機(jī)固定翼行業(yè)報(bào)告
- 《莖和葉》名師課件
- 玻璃體腔注射-操作流程和注意事項(xiàng)(特選參考)課件
- JGJ114-2014 鋼筋焊接網(wǎng)混凝土結(jié)構(gòu)技術(shù)規(guī)程
- 110kV升壓站構(gòu)支架組立施工方案
- CONSORT2010流程圖(FlowDiagram)【模板】文檔
- 前廳月工作計(jì)劃
- 生物醫(yī)學(xué)工程倫理 課件全套 第1-10章 生物醫(yī)學(xué)工程與倫理-醫(yī)學(xué)技術(shù)選擇與應(yīng)用的倫理問(wèn)題
- 新戰(zhàn)略營(yíng)銷課件
- 人文地理學(xué)考試名詞解釋全套
- 統(tǒng)編版五年級(jí)下冊(cè)第五單元 習(xí)作:形形色色的人 課件 (共16張PPT)
評(píng)論
0/150
提交評(píng)論