




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、附件1:學(xué)號:012081034課程設(shè)計題目進(jìn)程同步模擬設(shè)計一一讀者和寫者問題學(xué)院計算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè)計算機(jī)科學(xué)與技術(shù)班級計算機(jī)科學(xué)與技術(shù)姓名指導(dǎo)教師2011年 1月19日目 錄11設(shè)計概述41.1問題描述:41.1規(guī)則:41.2讀者和寫者的相互關(guān)系: 41.2采用信號量機(jī)制41.3 c+語言程序模擬用信號量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題52課程設(shè)計目的及功能52.1設(shè)計目的52.2設(shè)計功能:53需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說明(功能與框圖)53.1數(shù)據(jù)結(jié)構(gòu)53.2模塊說明63.3開發(fā)平臺及源程序的主要部分63.3.1寫操作的設(shè)計: 63.3.2讀操作的設(shè)計:73.3.3主函數(shù)的設(shè)計:93.4功能
2、流程圖124測試用例,運(yùn)行結(jié)果與運(yùn)行情況分析124測試用例124.2運(yùn)行結(jié)果134.3運(yùn)行情況分析145自我評價與總結(jié)156參考文獻(xiàn)16課程設(shè)計任務(wù)書學(xué)生姓名: 專業(yè)班級:計算機(jī)科學(xué)與技術(shù)指導(dǎo)教師: 工作單位:計算機(jī)科學(xué)與技術(shù)學(xué)院題 目:進(jìn)程同步模擬設(shè)計一一讀者和寫者問題初始條件:1. 預(yù)備內(nèi)容:閱讀操作系統(tǒng)的進(jìn)程管理章節(jié)內(nèi)容,對進(jìn)程的同步和互斥,以及信號量機(jī)制度 有深入的理解。2. 實(shí)踐準(zhǔn)備:掌握一種計算機(jī)高級語言的使用。要求完成的主要任務(wù):(包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)1. 模擬用信號量機(jī)制實(shí)現(xiàn)讀者和寫者問題。2. 設(shè)計報告內(nèi)容應(yīng)說明:(1)課程設(shè)計目的與功能
3、;(2)需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說明(功能與框圖);(3)源程序的主要部分;(4)測試用例,運(yùn)行結(jié)果與運(yùn)行情況分析;(5)自我評價與總結(jié).i)你認(rèn)為凍完成的設(shè)計哪些地方做得比較好或比較出色;ii)什么地方做得不太好,以后如何改正;iii)從本設(shè)計得到的收獲(在編寫,調(diào)試,執(zhí)行過程屮的經(jīng)驗(yàn)和教訓(xùn));iv)完成本題是否有其他的其他方法(如果有,簡要說明該方法);v)對實(shí)驗(yàn)題的評價和改進(jìn)意見,請你推薦設(shè)計題目。時間安排:設(shè)計安排一周:周1、周2:完成程序分析及設(shè)計。周2、周3:完成程序調(diào)試及測試。周4、周5:驗(yàn)收、撰寫課程設(shè)計報告。(注意事項(xiàng):嚴(yán)禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記)指導(dǎo)教師簽名
4、:系主任(或責(zé)任教師)簽名:進(jìn)程同步模擬設(shè)計讀者和寫者問題1設(shè)計概述1.1問題描述:模擬用信號量機(jī)制實(shí)現(xiàn)讀者和寫者問題,即有兩組并發(fā)進(jìn)程:讀者和寫者,共享一組數(shù) 據(jù)區(qū),進(jìn)行讀寫操作,要求任一吋刻“寫者”最多只允許一個,而“讀者"則允許多個。1.1.1規(guī)則:允許多個讀者同時執(zhí)行讀操作;不允許讀者、寫者同吋操作;不允許多個寫者同時操作。1.1.2讀者和寫者的相互關(guān)系:1) “讀一寫”互斥,即不能同吋有一個讀者在讀,同吋去有一個寫者在寫;2) “寫一寫”互斥,即不能有兩個寫者同時進(jìn)行寫操作;3) “讀一讀”允許,即可以有兩個以上的讀者同時進(jìn)行讀操作。1.2采用信號量機(jī)制1) wmutex表
5、示讀寫的互斥信號量,初值:wmutex =1;2) 公共變量rcount表示“止在讀"的進(jìn)程數(shù),初值:rcount =0;3) rmutex:表示對rcount的互斥操作,初值:rmutex=l omain()讀者進(jìn)程:v(rmutex);int wmutex=l;readn()while (false);int rmutex=l; p(rmutex);寫者進(jìn)程: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+語言程序模擬用信號量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題本次設(shè)計中首先用戶輸入讀者個數(shù)r_num和寫者個數(shù)w_num,來模擬用信號量機(jī)制實(shí) 現(xiàn)r_num個讀者和w_num個寫者同時處理一個數(shù)據(jù)區(qū)的問題。所有的讀者或?qū)懻邔Σ僮?的申請和完成都是由用戶控制,更容易反映讀者和寫者問題的規(guī)律。2課程設(shè)計目的及功能2.1設(shè)計目的通過實(shí)驗(yàn)?zāi)M讀者和寫者z間的關(guān)系,了解并掌握他們z間的關(guān)系及其原理。由此增 加對進(jìn)程同步的問題的了解。具體如下:1)掌握基木的同步互斥算法,理解讀者
7、和寫者模型;2)了解windows中多線程(多進(jìn)程)的并發(fā)執(zhí)行機(jī)制,線程(進(jìn)程)間的同步和互 斥;3)學(xué)習(xí)使用windows中基本的同步對象,掌握相應(yīng)的api。2.2設(shè)計功能:利用模擬用信號量機(jī)制實(shí)現(xiàn)讀者和寫者問題:通過用戶控制讀進(jìn)程和寫進(jìn)程,反應(yīng)讀 者和寫者問題中所涉及的進(jìn)程的同步與互斥。3需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說明(功能與框圖)3.1數(shù)據(jù)結(jié)構(gòu)int r_num;/讀者個數(shù)int w_num;/寫者個數(shù)int wmutex二1;表示允許寫或允許讀int rcoinn=0;表示正在讀的進(jìn)程數(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 表示對應(yīng)的讀者,1 為空3.2模塊說明四組p、v函數(shù):1) 寫者進(jìn)程由3個函數(shù)組成void write_p(int i);模擬寫者對wmutex的p操作,同時也作為寫者進(jìn)程的入口 void wri
9、te(int i);開始寫操作void write_v(int i);/模擬寫者對wmutex的v操作,寫操作完成的時候調(diào)用2) 讀者進(jìn)程由8個函數(shù)組成void radd_p(int i);模擬讀之前對rmutex的p操作,同時也作為讀者進(jìn)程的入口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操作,讀操作完成的時候調(diào)用void rsub
10、(int i);/rcount 減 1void read_v(int i);模擬讀者對 wmutex 的 v 操作void rsub_v(int i);模擬讀z后對 rmutex 的 v 操作3.3開發(fā)平臺及源程序的主要部分本實(shí)驗(yàn)用c+語言在visual c+6.0中編程。3.3.1寫操作的設(shè)計:模擬寫者對wmutex的p操作,同時為寫者進(jìn)程也作寫的入口:void write_p(int i)wmutex;if(wmutex<0)表示如果wmutex<0,則該寫者進(jìn)入等待隊列w_wait -w mutex- l=i;elsewrite(i);進(jìn)行寫操作: void write(in
11、t i)模擬寫者對wmutex的v操作,寫操作完成的時候調(diào)用:void write_v(int i)wi=0;wmutex+;if(wmutex<=0)表示如果wmutex<=0,則從等待隊列中選擇寫者或讀者進(jìn)行操作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讀操作的設(shè)計:模擬讀之前對rmutex的p操作,同時也作為讀者進(jìn)程的入口:void radd_p(int i) rmutex;if(rmutex<0)表示如果rmutex<0,則進(jìn)入等待隊列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,則進(jìn)入等待隊列w_wait-wmutex-1 =10;r_wait0=i;elseradd_v(i);模擬讀之前對rmutex的v操作:void radd_v(int i)rmutex+;if(rmutex<=0)表示如果rmutex<=0,則從等待隊列中選擇讀者進(jìn)入rcount的臨界區(qū) int k,j;j=r_wait0;for(k=0;k<r_num;k+) r_waitk=r_waitk+1 ;radd(j);read(i);進(jìn)行讀操作:void read(int i)ri=l;模擬讀之后對rmutex的p操作,讀操作完成的時
14、候調(diào)用: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,則從等待隊列中選擇寫者或讀者進(jìn)行操作 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ù)的設(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(yuǎn)«(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(yuǎn)«(k+1);if(
21、rk=o) cout«*'申請”;else cout«"完成”;cout«" (,«(w_num+r_num+1 )«h)結(jié)束h«endl;cout«"請輸入選項(xiàng)序號:”;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測試用例,運(yùn)行結(jié)果與運(yùn)行情況分析4.1測試用例本程序模擬讀者和寫者問題,每個讀者和寫者對讀操作或?qū)懖僮鞯纳暾埡屯瓿啥加捎脩羰謩舆x擇。測試用例如下: 輸入寫者個數(shù):3輸入讀者個數(shù):53、寫者1申請寫操作4、寫者3中請寫操作5、讀者2中請讀操作6
23、、寫者1完成寫操作7、讀者5申請讀操作8、寫者3完成寫操作9、讀者5完成讀操作(選擇選項(xiàng)(d)(選擇選項(xiàng)(3)(選擇選項(xiàng)(5)(選擇選項(xiàng)(1)(選擇選項(xiàng)(8)(選擇選項(xiàng)(3)(選擇選項(xiàng)(8)10、讀者2完成讀操作(選擇選項(xiàng)(5) 11 結(jié)束(選擇選項(xiàng)(9)4.2運(yùn)行結(jié)果請輸入與者個數(shù)1110): 3幘輸入讀者個數(shù)a亂$ : 5mutex=l rcount =0 rnutex=i符隊列中無赴象 輸入選項(xiàng)岸14?諼費(fèi)申請9 )結(jié)束(5)讀者2申請is(5)讀者2申請wmut ex=0 rcount=0 rnutex=l寫者1正在寫 汽獻(xiàn) 請輸入選項(xiàng)序號:3dmutex=l rcount=0 run
24、tex=l寫者1正在寫卷借隊歹l中直鼻一 與者3(1)鳥者1完成了入選項(xiàng)序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請輸入選項(xiàng): 8(4)讀者1申請(6)讀者3申請運(yùn)行結(jié)果圖(a)jnutex=-1 rcount =1 rmutex=-1寫者3正在寫3)寫者3完成(4)讀者1申請(6)讀者3申請| it|s食薛申請 i冃瞌入選項(xiàng)岸昌:3
25、2 7 讀讀 肚左祀象 ou正正獨(dú)厘 c 2 5 etapsif r者者麻澤硯 0讀扁者壽一 x=一一炒寫愿一 e一一砂 / ut- -sy 阪一一等1請rnutex=l:諫申請(5)讀者2完成jmutex=0 rcount=1 rnutex=l詒揃入選項(xiàng)jt"v: 5>he»e< 請38(5)讀者2完成wnu tex=dl rcount =0 rnu tex=l 等覺隊列中無號象請輸a 'gpress any2)謹(jǐn)27)諫者4 亍入選項(xiàng)序號:廠.to continue(5)讀者2申請運(yùn)行結(jié)果圖(b)4.3運(yùn)行情況分析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進(jìn)入等待隊列5、讀者2申請讀操作此吋,信號量rmutex減1,所以rmutex=orcount 加 1,所以 rcount=l乂因?yàn)?rcount= 1,所以 wmutex 減 1, wmutex=-2寫者1正在寫,所以讀者2進(jìn)入等待隊列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進(jìn)入rcount的臨界區(qū),rcount加1, rcount=2rmutex 加 1, rmutex= 1此時讀者5可宜接開始讀操作所以此時,讀者2和讀者5正在進(jìn)行讀操作9、讀者5完成讀操作此時 rcount 減 1, rcount= 1還剩讀者2在進(jìn)行讀操作10、讀者2完成讀操作此時 rcount 減 1, rcount=0wmutex
28、力口 1,所以 wmutex=l11、結(jié)束5自我評價與總結(jié)本次設(shè)計中,用c+編程模擬了用信號量機(jī)制實(shí)現(xiàn)讀者和寫者問題。wmutex表示讀 寫的互斥信號量,初值為1。公共變量rcount表示“正在讀”的進(jìn)程數(shù),初值為0; rmutex 表示對rcount的互斥操作,初值為1。運(yùn)行時可以自由選擇要申請操作的讀者或?qū)懻摺.?dāng) 某些讀者或?qū)懻哒幵谧x或?qū)懙臓顟B(tài)吋,可以自由選擇完成某個讀者或?qū)懻叩牟僮?。程?操作簡單,并能充分反映出了讀者和寫者的問題。最開始,我的程序是給定了讀者和寫者 的個數(shù)的,后來老師建議讓用戶決定讀者和寫者的個數(shù)。所以我把程序改成了由用戶輸入 讀者和寫者個數(shù)的形式,這樣更靈活了。由于模擬的是并發(fā)進(jìn)程而編寫的程序是按步驟執(zhí)行的,所以為了讓程序能夠正常的執(zhí) 行,我寫了 4組不同的類似于p、v原語的函數(shù),而口和真正的p、v原語有一點(diǎn)差別, 但
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄉(xiāng)村合作社與農(nóng)戶聯(lián)合開發(fā)農(nóng)業(yè)技術(shù)項(xiàng)目協(xié)議
- 通信技術(shù)與信號處理練習(xí)題
- 技術(shù)標(biāo)準(zhǔn)制定合作協(xié)議
- 數(shù)學(xué)課本九章算術(shù)教案
- 教育資源分布報告表
- 西廂記的愛情悲劇征文
- 中學(xué)生國學(xué)經(jīng)典故事解讀
- 農(nóng)業(yè)旅游開發(fā)實(shí)施方案
- 數(shù)據(jù)安全與隱私保護(hù)服務(wù)協(xié)議約定事項(xiàng)
- 業(yè)務(wù)往來預(yù)付款協(xié)議書
- 體育測量與評價-第二章-體育測量與評價的基礎(chǔ)理論課件
- 法律服務(wù)方案(投標(biāo))
- 轉(zhuǎn)移的危險廢物性狀清單
- 高中英語-新外研版必修一unit5-The-Monarchs-Journey-公開課reading課件
- 建設(shè)項(xiàng)目用地預(yù)審與選址意見課件講解
- 四年級公共安全教育全冊教案(海峽教育出版社)
- 工程結(jié)構(gòu)通用規(guī)范
- 《構(gòu)成基礎(chǔ)》PPT課件(190頁P(yáng)PT)
- 四年級道德與法治從中國制造到中國創(chuàng)造
- 2021-2022新教科版四年級科學(xué)下冊全一冊全部課件(共24課)
- 3 棄渣場施工方案
評論
0/150
提交評論