




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、附件1:學號:012081034課程設計題目進程同步模擬設計一一讀者和寫者問題學院計算機科學與技術學院專業(yè)計算機科學與技術班級計算機科學與技術姓名指導教師2011年 1月19日目 錄11設計概述41.1問題描述:41.1規(guī)則:41.2讀者和寫者的相互關系: 41.2采用信號量機制41.3 c+語言程序模擬用信號量機制實現(xiàn)生產者和消費者問題52課程設計目的及功能52.1設計目的52.2設計功能:53需求分析,數(shù)據(jù)結構或模塊說明(功能與框圖)53.1數(shù)據(jù)結構53.2模塊說明63.3開發(fā)平臺及源程序的主要部分63.3.1寫操作的設計: 63.3.2讀操作的設計:73.3.3主函數(shù)的設計:93.4功能
2、流程圖124測試用例,運行結果與運行情況分析124測試用例124.2運行結果134.3運行情況分析145自我評價與總結156參考文獻16課程設計任務書學生姓名: 專業(yè)班級:計算機科學與技術指導教師: 工作單位:計算機科學與技術學院題 目:進程同步模擬設計一一讀者和寫者問題初始條件:1. 預備內容:閱讀操作系統(tǒng)的進程管理章節(jié)內容,對進程的同步和互斥,以及信號量機制度 有深入的理解。2. 實踐準備:掌握一種計算機高級語言的使用。要求完成的主要任務:(包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求)1. 模擬用信號量機制實現(xiàn)讀者和寫者問題。2. 設計報告內容應說明:(1)課程設計目的與功能
3、;(2)需求分析,數(shù)據(jù)結構或模塊說明(功能與框圖);(3)源程序的主要部分;(4)測試用例,運行結果與運行情況分析;(5)自我評價與總結.i)你認為凍完成的設計哪些地方做得比較好或比較出色;ii)什么地方做得不太好,以后如何改正;iii)從本設計得到的收獲(在編寫,調試,執(zhí)行過程屮的經(jīng)驗和教訓);iv)完成本題是否有其他的其他方法(如果有,簡要說明該方法);v)對實驗題的評價和改進意見,請你推薦設計題目。時間安排:設計安排一周:周1、周2:完成程序分析及設計。周2、周3:完成程序調試及測試。周4、周5:驗收、撰寫課程設計報告。(注意事項:嚴禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記)指導教師簽名
4、:系主任(或責任教師)簽名:進程同步模擬設計讀者和寫者問題1設計概述1.1問題描述:模擬用信號量機制實現(xiàn)讀者和寫者問題,即有兩組并發(fā)進程:讀者和寫者,共享一組數(shù) 據(jù)區(qū),進行讀寫操作,要求任一吋刻“寫者”最多只允許一個,而“讀者"則允許多個。1.1.1規(guī)則:允許多個讀者同時執(zhí)行讀操作;不允許讀者、寫者同吋操作;不允許多個寫者同時操作。1.1.2讀者和寫者的相互關系:1) “讀一寫”互斥,即不能同吋有一個讀者在讀,同吋去有一個寫者在寫;2) “寫一寫”互斥,即不能有兩個寫者同時進行寫操作;3) “讀一讀”允許,即可以有兩個以上的讀者同時進行讀操作。1.2采用信號量機制1) wmutex表
5、示讀寫的互斥信號量,初值:wmutex =1;2) 公共變量rcount表示“止在讀"的進程數(shù),初值:rcount =0;3) rmutex:表示對rcount的互斥操作,初值:rmutex=l omain()讀者進程:v(rmutex);int wmutex=l;readn()while (false);int rmutex=l; p(rmutex);寫者進程:int rcount=0;rcount+;writem()cobeginif (rcount=l) pread 1();(wmutex);p(wmutex); v(rmutex);readi();讀寫write 1();p(
6、 rmutex); rcount-;v(wmutex);writejo;if (rcount=0)coendv(wmutex);1 -3 c+語言程序模擬用信號量機制實現(xiàn)生產者和消費者問題本次設計中首先用戶輸入讀者個數(shù)r_num和寫者個數(shù)w_num,來模擬用信號量機制實 現(xiàn)r_num個讀者和w_num個寫者同時處理一個數(shù)據(jù)區(qū)的問題。所有的讀者或寫者對操作 的申請和完成都是由用戶控制,更容易反映讀者和寫者問題的規(guī)律。2課程設計目的及功能2.1設計目的通過實驗模擬讀者和寫者z間的關系,了解并掌握他們z間的關系及其原理。由此增 加對進程同步的問題的了解。具體如下:1)掌握基木的同步互斥算法,理解讀者
7、和寫者模型;2)了解windows中多線程(多進程)的并發(fā)執(zhí)行機制,線程(進程)間的同步和互 斥;3)學習使用windows中基本的同步對象,掌握相應的api。2.2設計功能:利用模擬用信號量機制實現(xiàn)讀者和寫者問題:通過用戶控制讀進程和寫進程,反應讀 者和寫者問題中所涉及的進程的同步與互斥。3需求分析,數(shù)據(jù)結構或模塊說明(功能與框圖)3.1數(shù)據(jù)結構int r_num;/讀者個數(shù)int w_num;/寫者個數(shù)int wmutex二1;表示允許寫或允許讀int rcoinn=0;表示正在讀的進程數(shù)int rmutex=l;/表示對rcount的互斥操作int r 10=0,0,0,0,0,0,0,
8、0,0,0;/表示讀者的狀態(tài),1表示正在讀int w10二0,0,0,0,0,0,0,0,0,0;/表示寫者的狀態(tài),1表示正在寫int w_waitll=-l,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;/示等待隊列,09 表示寫者,10 時需引入讀者的等待隊列,1表示空int r_waitll=-l,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;/讀者的等待隊列,09 表示對應的讀者,1 為空3.2模塊說明四組p、v函數(shù):1) 寫者進程由3個函數(shù)組成void write_p(int i);模擬寫者對wmutex的p操作,同時也作為寫者進程的入口 void wri
9、te(int i);開始寫操作void write_v(int i);/模擬寫者對wmutex的v操作,寫操作完成的時候調用2) 讀者進程由8個函數(shù)組成void radd_p(int i);模擬讀之前對rmutex的p操作,同時也作為讀者進程的入口void radd(int i);/rcount 加 1void read_p(int i);模擬讀者對 wmutex 的 p 操作void radd_v(int i);模擬讀之/前對rmutex的v操作void read(int i);/讀void rsub_p(int i);模擬讀之后對rmutex的p操作,讀操作完成的時候調用void rsub
10、(int i);/rcount 減 1void read_v(int i);模擬讀者對 wmutex 的 v 操作void rsub_v(int i);模擬讀z后對 rmutex 的 v 操作3.3開發(fā)平臺及源程序的主要部分本實驗用c+語言在visual c+6.0中編程。3.3.1寫操作的設計:模擬寫者對wmutex的p操作,同時為寫者進程也作寫的入口:void write_p(int i)wmutex;if(wmutex<0)表示如果wmutex<0,則該寫者進入等待隊列w_wait -w mutex- l=i;elsewrite(i);進行寫操作: void write(in
11、t i)模擬寫者對wmutex的v操作,寫操作完成的時候調用:void write_v(int i)wi=0;wmutex+;if(wmutex<=0)表示如果wmutex<=0,則從等待隊列中選擇寫者或讀者進行操作int k,j;if(w_wait0>=0)&&(w_wait 0 < w_num)j=w_wait0;for(k=0;k<w_num;k+) w_waitk=w_waitk+1 ;write(j);elsej=r_wait0;for(k=0;k<w_num;k+) w_waitk=w_waitk+1 ; for(k=0;k<
12、;r_num;k+) r_waitk =r_waitk+1; radd_v(j);3.3.2讀操作的設計:模擬讀之前對rmutex的p操作,同時也作為讀者進程的入口:void radd_p(int i) rmutex;if(rmutex<0)表示如果rmutex<0,則進入等待隊列r_wait-rmutex=i;elseradd(i);對于rcount加1的控制:void radd(int i)rcount+;if(rcount=l)read_p(i);elseradd_v(i);模擬讀者對wmutex的p操作: void read_p(int i)wmutex;if(wmutex
13、<0)表示如果wmutex<0,則進入等待隊列w_wait-wmutex-1 =10;r_wait0=i;elseradd_v(i);模擬讀之前對rmutex的v操作:void radd_v(int i)rmutex+;if(rmutex<=0)表示如果rmutex<=0,則從等待隊列中選擇讀者進入rcount的臨界區(qū) int k,j;j=r_wait0;for(k=0;k<r_num;k+) r_waitk=r_waitk+1 ;radd(j);read(i);進行讀操作:void read(int i)ri=l;模擬讀之后對rmutex的p操作,讀操作完成的時
14、候調用:void rsub_p(int i)ri=0;rmutex;rsub(i);對rcount減1的控制:void rsub(int i)rcount;if(rcount=0)read_v(i);elsersub_v(i);模擬讀者對wmutex的v操作:void read_v(int i) wmutex+;if(wmutex<=0) 表示如果wmutex<=0,則從等待隊列中選擇寫者或讀者進行操作 int k,j;if(w_wait0>=0)&&(w_wait 0 < w_num)j=w_wait0;for(k=0;k<w_num;k+) w
15、_waitk=w_waitk+1 ;write(j);elsej=r_wait0;for(k=0;k<w_num;k+) w_waitk=w_waitk+1 ;for(k=0;k<r_num;k+) r_waitk =r_waitk+1;radd_v(j);rsub_v(i);模擬讀之后對rmutex的v操作:void rsub_v(int i)rmutex+;1.3.3主函數(shù)的設計:int main()cout«"請輸入寫者個數(shù)(1到10): ”;cin»w_num;while(w_num< l|w_num> 10)cout«-
16、輸入有誤,請重新輸入寫者個數(shù)(1到10):- cin»w_num;完成對寫者個數(shù)的輸入cout«h請輸入讀者個數(shù)(1到10): ”;cin»r_num;while(r_num< l|r_num> 10)cout«"輸入有誤,請重新輸入讀者個數(shù)(1到10): ”;cin»r_num;完成對讀者個數(shù)的輸入int x,kj,a20;while(l)cout«f fk| k| k| k| k| k| k| k| k| k| k| k| k| k| k| k| k| k| if1 1"卜"卜"
17、卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜"卜、yy f < ifor(k=0;k<20;k4-+) ak=o;coutvv”wmutex二”vvwmutex«
18、”rcount二"vvrcountvv” rmutex=,«rmutex«endl;for(k=0;k<w_num;k+)if(wk=l)cout«"-寫者"«(k+ l)«n 正在寫 h«endl;for(k=0;k<r_num;k+)if(rk=l)cout«"-讀者 n«(k+l)«n 正在讀"«endl;if(w_waito=-l) cout«"等待隊列中無對象"«endl; elsec
19、out«h等待隊列中有:”;for(k=0;k<w_num;k+)if(w_waitk= 10)forg=0;j<5;j+)if(r_waitj!=-l)cout«,->,«n 讀者 h«(r_waitj+1); if(w_waitk>=0)&&(w_wait k <w_num) cout«"->',«"寫者 h«(w_waitk+1);cout«endl;for(k=0;k<w_num;k+)x=0;for(j=0;j<w
20、_num;j+)if(k=w_waitj)ak=l;x=l;if(x=l) continue;cout«n (”(k+l)vv”)寫者h«(k+1); if(wk=0) cout«"申請 ”;else cout«"完成”;for(k=0;k<r_num;k+) x=0; for(j=0;j<r_num;j+) if(k=r_waitj)ak+w_num=l; x=l;if(x=l) continue;cout«" (n«(k+l+w_num)«h)讀者h«(k+1);if(
21、rk=o) cout«*'申請”;else cout«"完成”;cout«" (,«(w_num+r_num+1 )«h)結束h«endl;cout«"請輸入選項序號:”;cin»x;while(x< 1 |x>(w_num+r_num+ l)|ax-1=1)if(ax-l=l) cout«"該對象已在等待隊列中,請垂新輸入:”; else cout«"輸入有誤,請重新輸入”;cin»x; for(k=0;k<
22、w_num;k+)if(x=(k+l)if(wk=0) write_p(k);else write_v(k);break;for(k=0;k<r_num;k+)if(x=(k+1 +w_num)if(rk=o) radd_p(k);else rsub_p(k);break;if(x=(w_num+r_num+1) return 0;3.4功能流程圖4測試用例,運行結果與運行情況分析4.1測試用例本程序模擬讀者和寫者問題,每個讀者和寫者對讀操作或寫操作的申請和完成都由用戶手動選擇。測試用例如下: 輸入寫者個數(shù):3輸入讀者個數(shù):53、寫者1申請寫操作4、寫者3中請寫操作5、讀者2中請讀操作6
23、、寫者1完成寫操作7、讀者5申請讀操作8、寫者3完成寫操作9、讀者5完成讀操作(選擇選項(d)(選擇選項(3)(選擇選項(5)(選擇選項(1)(選擇選項(8)(選擇選項(3)(選擇選項(8)10、讀者2完成讀操作(選擇選項(5) 11 結束(選擇選項(9)4.2運行結果請輸入與者個數(shù)1110): 3幘輸入讀者個數(shù)a亂$ : 5mutex=l rcount =0 rnutex=i符隊列中無赴象 輸入選項岸14?諼費申請9 )結束(5)讀者2申請is(5)讀者2申請wmut ex=0 rcount=0 rnutex=l寫者1正在寫 汽獻 請輸入選項序號:3dmutex=l rcount=0 run
24、tex=l寫者1正在寫卷借隊歹l中直鼻一 與者3(1)鳥者1完成了入選項序5: 5暮狽蠻申請(5)讀者2申請(6)i賣者3申請dmutex=-2 rcount =1 rmutex=0寫者1正在寫爭待隊列中有:-寫者3-讀者2(1)與者臨感請諫者呻請6)讀者3申請(?)讀者4申請wmiitex=l rcount =1 rmutex=0寫者3正在寫 爺貸隊wf: ->i者2請輸入選項: 8(4)讀者1申請(6)讀者3申請運行結果圖(a)jnutex=-1 rcount =1 rmutex=-1寫者3正在寫3)寫者3完成(4)讀者1申請(6)讀者3申請| it|s食薛申請 i冃瞌入選項岸昌:3
25、2 7 讀讀 肚左祀象 ou正正獨厘 c 2 5 etapsif r者者麻澤硯 0讀扁者壽一 x=一一炒寫愿一 e一一砂 / ut- -sy 阪一一等1請rnutex=l:諫申請(5)讀者2完成jmutex=0 rcount=1 rnutex=l詒揃入選項jt"v: 5>he»e< 請38(5)讀者2完成wnu tex=dl rcount =0 rnu tex=l 等覺隊列中無號象請輸a 'gpress any2)謹27)諫者4 亍入選項序號:廠.to continue(5)讀者2申請運行結果圖(b)4.3運行情況分析1、輸入寫者個數(shù):32、輸入讀者個數(shù)
26、:53 剛開始時 wmutex=l rcount=0 rmutex=l寫者1申請寫操作此吋,信號量wmutex減1,所以wmutex=0寫者1可以盲接開始寫操作4、寫者3中請寫操作此時,信號量wmutex減1,所以wmutex=-1寫者1正在寫,所以寫者3進入等待隊列5、讀者2申請讀操作此吋,信號量rmutex減1,所以rmutex=orcount 加 1,所以 rcount=l乂因為 rcount= 1,所以 wmutex 減 1, wmutex=-2寫者1正在寫,所以讀者2進入等待隊列6、寫者1完成寫操作此吋,信號量wmutex加1,所以wmutex=-1寫者3開始寫操作7、讀者5中請讀操
27、作此時,信號量rmutex減1,所以rmutex=-1讀者2還在rcount的臨界區(qū)屮,所以讀者5等待8、寫者3完成寫操作此時,信號量 wmutex加1,所以wmutex=0讀者2從等待隊列中取出,并且rmutex加1,則rmutex=0讀者2開始讀操作讀者5進入rcount的臨界區(qū),rcount加1, rcount=2rmutex 加 1, rmutex= 1此時讀者5可宜接開始讀操作所以此時,讀者2和讀者5正在進行讀操作9、讀者5完成讀操作此時 rcount 減 1, rcount= 1還剩讀者2在進行讀操作10、讀者2完成讀操作此時 rcount 減 1, rcount=0wmutex
28、力口 1,所以 wmutex=l11、結束5自我評價與總結本次設計中,用c+編程模擬了用信號量機制實現(xiàn)讀者和寫者問題。wmutex表示讀 寫的互斥信號量,初值為1。公共變量rcount表示“正在讀”的進程數(shù),初值為0; rmutex 表示對rcount的互斥操作,初值為1。運行時可以自由選擇要申請操作的讀者或寫者。當 某些讀者或寫者正處在讀或寫的狀態(tài)吋,可以自由選擇完成某個讀者或寫者的操作。程序 操作簡單,并能充分反映出了讀者和寫者的問題。最開始,我的程序是給定了讀者和寫者 的個數(shù)的,后來老師建議讓用戶決定讀者和寫者的個數(shù)。所以我把程序改成了由用戶輸入 讀者和寫者個數(shù)的形式,這樣更靈活了。由于模擬的是并發(fā)進程而編寫的程序是按步驟執(zhí)行的,所以為了讓程序能夠正常的執(zhí) 行,我寫了 4組不同的類似于p、v原語的函數(shù),而口和真正的p、v原語有一點差別, 但
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度大數(shù)據(jù)處理履行合同安全保密協(xié)議
- 二零二五年度電子商務運營咨詢費合同
- 二零二五年度環(huán)保廣告投放與綠色營銷合同匯編
- 二零二五年度供應鏈金融終止協(xié)議通知函
- 二零二五年度變壓器制造技術培訓與轉讓協(xié)議
- 二零二五年度農村安置房租賃保證金及退還合同
- 2025年度校企深度合作人才培養(yǎng)項目協(xié)議書
- 建筑公司勞務合同(2025年度)勞務人員工資及福利調整協(xié)議
- 二零二五年度山東省新建商品房買賣合同預售與社區(qū)教育服務協(xié)議
- 二零二五年度高利貸借款合同金融科技賦能發(fā)展
- 2024年上海市中考語文真題卷及答案解析
- 校園直飲水機供貨安裝及售后服務方案
- 廢氣處理系統(tǒng)改造及廢水處理系統(tǒng)改造項目可行性研究報告
- 小學全體教師安全工作培訓
- 大學物業(yè)服務月考核評價評分表
- 現(xiàn)代家政導論-課件 1.1.2認識家政學起源與發(fā)展
- 期末模擬測試卷(試卷)2024-2025學年六年級數(shù)學上冊人教版
- 2024屆護士資格考試必考基礎知識復習題庫及答案(共170題)
- 工業(yè)大數(shù)據(jù)算法賽項實際操作部分評分細則變更說明
- 小學生防性侵安全教育主題班會課件
- DBT29-305-2024 天津市裝配式建筑評價標準
評論
0/150
提交評論