版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課 程 設(shè) 計</b></p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 學(xué)生姓名: 專業(yè)班級: 計算機科學(xué)與技術(shù) </p><p> 指導(dǎo)教師: 工作單位: 計算機科學(xué)與技術(shù)學(xué)院 </p><
2、p> 題 目: 進程同步模擬設(shè)計——司機和售票員問題 </p><p><b> 初始條件:</b></p><p> 1.預(yù)備內(nèi)容:閱讀操作系統(tǒng)的進程管理章節(jié)內(nèi)容,對進程的同步和互斥,以及信號量機制度有深入的理解。</p><p> 2.實踐準(zhǔn)備:掌握一種計算機高級語言的使用。</p><p
3、> 要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p> 1.模擬公共汽車司機和售票員開關(guān)門及行車操作的同步模型。</p><p> 2.設(shè)計報告內(nèi)容應(yīng)說明:</p><p> ?、?課程設(shè)計目的與功能;</p><p> ?、?需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說明(功能與框圖);</
4、p><p> ?、?源程序的主要部分;</p><p> ?、?測試用例,運行結(jié)果與運行情況分析;</p><p> ?、?自我評價與總結(jié):</p><p> i)你認(rèn)為你完成的設(shè)計哪些地方做得比較好或比較出色;</p><p> ii)什么地方做得不太好,以后如何改正;</p><p> i
5、ii)從本設(shè)計得到的收獲(在編寫,調(diào)試,執(zhí)行過程中的經(jīng)驗和教訓(xùn));</p><p> iv)完成本題是否有其他的其他方法(如果有,簡要說明該方法);</p><p> v)對實驗題的評價和改進意見,請你推薦設(shè)計題目。</p><p><b> 時間安排:</b></p><p> 設(shè)計安排一周:周1、周2:完成程
6、序分析及設(shè)計。</p><p> 周2、周3:完成程序調(diào)試及測試。</p><p> 周4、周5:驗收、撰寫課程設(shè)計報告。</p><p> ?。ㄗ⒁馐马棧簢?yán)禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記)</p><p> 指導(dǎo)教師簽名: 年 月 日</p><p&g
7、t; 系主任(或責(zé)任教師)簽名: 年 月 日</p><p><b> 課程設(shè)計目的與功能</b></p><p> 1.1課程設(shè)計目的:</p><p> 通過課程設(shè)計,運用信號量,模擬公共汽車司機和售票員開關(guān)門及行車操作的同步模型。1.2課程設(shè)計能夠?qū)崿F(xiàn)以下功能:</p><p
8、> 設(shè)置信號量,保證以下四點:</p><p> 公交運行的時候售票員不能開車門;</p><p> 公交停下,售票員方可打開車門;</p><p> 公交車門打開時,司機不能開車;</p><p> 公交車門關(guān)上時,司機方能啟動公交</p><p> 需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說明(功能與框圖)<
9、;/p><p><b> 2.1 需求分析</b></p><p> 為了保證公交運行的時候車門不能開,應(yīng)該設(shè)置一個表示公交運行的信號量,1表示公交運行在,0表示車已停下;</p><p> 為了保證車門打開的時候司機不能啟動公交,所以應(yīng)設(shè)置一個表示車門是否打開的信號量,0表示公交門打開,1表示公交門關(guān)上</p><p&g
10、t; 按照以上分析,兩個信號量在同一時刻必定相反,由此得到結(jié)論:設(shè)置一個信號量,1表示車停門開,0表示車開門關(guān)</p><p><b> 2.2 數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> Bus類</b></p><p> 成員變量:int flag表示公共的信號量,1表示車停門開,0表示車開門關(guān)</p&g
11、t;<p><b> 方法:</b></p><p> public synchronized void open(),表示乘務(wù)員開車門的動作</p><p> public synchronized void drive(),表示司機啟動車輛的動作</p><p> Driver類,繼承于Thread類</p>
12、;<p> 成員變量:private Bus c,表示該司機所駕駛的公交是c</p><p> 方法:public void run(),執(zhí)行Bus c的driver()方法</p><p> Conductor類,繼承于Thread類</p><p> 成員變量:private Bus c,表示該司機所駕駛的公交是c</p>&
13、lt;p> 方法:public void run(),執(zhí)行Bus c的open()方法</p><p><b> 2.3 模塊說明</b></p><p><b> Bus模塊</b></p><p> 這里主要介紹Bus模塊中的open()與driver()方法:</p><p>&
14、lt;b> open():</b></p><p> 方法open()具有synchronized關(guān)鍵字,表示該方法在執(zhí)行的過程中,其他方法不能夠改變該方法所在對象中所擁有的值,因此保證了時間的同步性。</p><p> While(車還在開){等待,運用wait()方法</p><p><b> }</b&g
15、t;</p><p><b> //車停下了</b></p><p><b> 乘客上下車</b></p><p><b> 車門關(guān)上</b></p><p> 改變信號量flag為0</p><p> 告訴司機車門關(guān)上了,可以啟動車輛,運用n
16、otify()方法</p><p><b> drive():</b></p><p> 類似于open()方法,方法drive ()具有synchronized關(guān)鍵字,表示該方法在執(zhí)行的過程中,其他方法不能夠改變該方法所在對象中所擁有的值,因此保證了時間的同步性。</p><p> While(車門還沒關(guān)){等待,運用wa
17、it()方法</p><p><b> }</b></p><p><b> //車門關(guān)了</b></p><p><b> 司機開車</b></p><p> 改變信號量flag為1</p><p> 車停下,告訴售票員可以開門了,運用not
18、ify()方法</p><p><b> Driver模塊</b></p><p> 設(shè)置count,表示該模擬過程執(zhí)行的次數(shù),</p><p> run()方法,執(zhí)行私有成員bus的drive()方法,執(zhí)行count次后停止。</p><p> Conductor模塊</p><p>
19、 類似,Driver類,設(shè)置count,表示該模擬過程執(zhí)行的次數(shù),</p><p> run()方法,執(zhí)行私有成員bus的open()方法,執(zhí)行count次后停止。</p><p><b> 源程序的主要部分</b></p><p><b> Bus類</b></p><p> class
20、Bus {</p><p> private int flag = 1; // 1 表示車停 ,門開,0表示車開,門關(guān)</p><p> public synchronized void open(){</p><p> while(flag == 0){</p><p><b> try {</b></
21、p><p> this.wait();</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b><
22、/p><p> System.out.println("opening the door, passengers gets in and out....");</p><p> System.out.println("closing the door...");</p><p><b> flag = 0;<
23、/b></p><p> this.notifyAll();</p><p><b> }</b></p><p> public synchronized void drive(){</p><p> while(flag == 1){</p><p><b> try
24、 {</b></p><p> this.wait();</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b>
25、 }</b></p><p> System.out.println("bus is driving...");</p><p> System.out.println("bus stops...");</p><p><b> flag = 1;</b></p><
26、;p> this.notifyAll();</p><p><b> }</b></p><p><b> }</b></p><p><b> Driver類</b></p><p> class Driver extends Thread{</p>
27、;<p> private Bus c;</p><p> public Driver(Bus c){</p><p> this.c = c;</p><p><b> }</b></p><p> int count = 10;</p><p> @SuppressW
28、arnings("static-access")</p><p><b> @Override</b></p><p> public void run() {</p><p> int count = 10;</p><p> while(count-- != 0){</p>
29、<p> c.drive();</p><p><b> try {</b></p><p> this.sleep(3000);</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p>
30、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> Conductor類</p><p> cl
31、ass Conductor extends Thread{</p><p> private Bus c;</p><p> public Conductor(Bus c) {</p><p> this.c = c;</p><p><b> }</b></p><p> @Suppr
32、essWarnings("static-access")</p><p><b> @Override</b></p><p> public void run() {</p><p> int count = 10;</p><p> while(count-- != 0){</p&g
33、t;<p><b> c.open();</b></p><p><b> try {</b></p><p> this.sleep(1000);</p><p> } catch (InterruptedException e) {</p><p> e.printSta
34、ckTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 測試用例,運行結(jié)果與運行情況分
35、析;</p><p><b> 運行結(jié)果</b></p><p> 通過數(shù)次重復(fù)性演示,可以看出公交運行與公交車門開關(guān)是在同步運行的。</p><p><b> 運行情況分析</b></p><p> 通過觀察運行結(jié)果,無論兩個線程誰先啟動誰后啟用,只要初始狀態(tài)設(shè)置的是“車停門開”,那么一
36、定是售票員Conductor線程先執(zhí)行,或者初始狀態(tài)時“車開門關(guān)”,那么一定是司機Driver線程先啟動。即:</p><p> Conductor c = hx.new Conductor(car);</p><p> Driver d = hx.new Driver(car);</p><p> Thread tc = new Thread(c);<
37、;/p><p> Thread td = new Thread(d);</p><p><b> 無論這里是:</b></p><p> td.start();</p><p> tc.start();</p><p><b> 還是:</b></p>&
38、lt;p> tc.start();</p><p> td.start();</p><p><b> (請注意順序)</b></p><p> 只要flag的初始值固定,那么程序輸出的結(jié)果也是不變的,這剛好體現(xiàn)了同步運行這一概念!</p><p><b> 自我評價與總結(jié):</b>
39、</p><p> 通過這次課程設(shè)計,我有以下感觸:</p><p> Java的Thread類以及synchronized關(guān)鍵字能夠狠好的處理信號量所引出的一系列問題。</p><p> 本程序在不影響功能的前提下,只使用了一個信號量便完成了任務(wù),不得不說是一個創(chuàng)新之處。</p><p> 通過將兩個同步與互斥的操作open與dri
40、ve封裝在Bus類中,實現(xiàn)了線程了互斥與同步進行。</p><p> 通過繼承Thread類,并將使Driver與Conductor類實例公共使用一個Bus類型變量,實現(xiàn)了信號量的共用。</p><p> 本科生課程設(shè)計成績評定表</p><p> 注:最終成績以五級分制記。優(yōu)(90-100分)、良(80-89分)、中(70-79分)、</p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 售票員和汽車司機的進程同步問題
- 操作系統(tǒng)課程設(shè)計——司機與售票員
- 操作系統(tǒng)課程設(shè)計報告—多進程同步橘子蘋果問題
- 算法課程設(shè)計---進程通信與進程同步機制實現(xiàn)
- 操作系統(tǒng)課程設(shè)計--進程通信與進程同步機制實踐
- 操作系統(tǒng)課程設(shè)計--進程通信與進程同步機制實踐
- 進程同步經(jīng)典習(xí)題
- 售票員的崗位職責(zé)
- 操作系統(tǒng)售票員與乘客
- 售票員個人工作總結(jié)
- 并發(fā)進程同步算法的設(shè)計方法
- 關(guān)于售票員的工作總結(jié)范文
- 寒假做售票員社會實踐報告
- 鐵路售票員職業(yè)技能鑒定題庫
- 寒假做售票員社會實踐報告
- 進程同步典型例題操作系統(tǒng)
- 售票員工作總結(jié)-售票員工作總結(jié)范本
- 2022公交車售票員寒假實習(xí)報告
- 課程設(shè)計—火車售票系統(tǒng)課程設(shè)計
- 多進程同步方法演示“生產(chǎn)者-消費者”問題
評論
0/150
提交評論