進(jìn)程同步模擬課程設(shè)計(jì)——司機(jī)和售票員問(wèn)題_第1頁(yè)
已閱讀1頁(yè),還剩9頁(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、<p><b>  課 程 設(shè) 計(jì)</b></p><p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  學(xué)生姓名: 專業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  指導(dǎo)教師: 工作單位: 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 </p><

2、p>  題 目: 進(jìn)程同步模擬設(shè)計(jì)——司機(jī)和售票員問(wèn)題 </p><p><b>  初始條件:</b></p><p>  1.預(yù)備內(nèi)容:閱讀操作系統(tǒng)的進(jìn)程管理章節(jié)內(nèi)容,對(duì)進(jìn)程的同步和互斥,以及信號(hào)量機(jī)制度有深入的理解。</p><p>  2.實(shí)踐準(zhǔn)備:掌握一種計(jì)算機(jī)高級(jí)語(yǔ)言的使用。</p><p

3、>  要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書撰寫等具體要求)</p><p>  1.模擬公共汽車司機(jī)和售票員開關(guān)門及行車操作的同步模型。</p><p>  2.設(shè)計(jì)報(bào)告內(nèi)容應(yīng)說(shuō)明:</p><p>  ⑴ 課程設(shè)計(jì)目的與功能;</p><p> ?、?需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說(shuō)明(功能與框圖);</

4、p><p> ?、?源程序的主要部分;</p><p> ?、?測(cè)試用例,運(yùn)行結(jié)果與運(yùn)行情況分析;</p><p>  ⑸ 自我評(píng)價(jià)與總結(jié):</p><p>  i)你認(rèn)為你完成的設(shè)計(jì)哪些地方做得比較好或比較出色;</p><p>  ii)什么地方做得不太好,以后如何改正;</p><p>  i

5、ii)從本設(shè)計(jì)得到的收獲(在編寫,調(diào)試,執(zhí)行過(guò)程中的經(jīng)驗(yàn)和教訓(xùn));</p><p>  iv)完成本題是否有其他的其他方法(如果有,簡(jiǎn)要說(shuō)明該方法);</p><p>  v)對(duì)實(shí)驗(yàn)題的評(píng)價(jià)和改進(jìn)意見,請(qǐng)你推薦設(shè)計(jì)題目。</p><p><b>  時(shí)間安排:</b></p><p>  設(shè)計(jì)安排一周:周1、周2:完成程

6、序分析及設(shè)計(jì)。</p><p>  周2、周3:完成程序調(diào)試及測(cè)試。</p><p>  周4、周5:驗(yàn)收、撰寫課程設(shè)計(jì)報(bào)告。</p><p> ?。ㄗ⒁馐马?xiàng):嚴(yán)禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記)</p><p>  指導(dǎo)教師簽名: 年 月 日</p><p&g

7、t;  系主任(或責(zé)任教師)簽名: 年 月 日</p><p><b>  課程設(shè)計(jì)目的與功能</b></p><p>  1.1課程設(shè)計(jì)目的:</p><p>  通過(guò)課程設(shè)計(jì),運(yùn)用信號(hào)量,模擬公共汽車司機(jī)和售票員開關(guān)門及行車操作的同步模型。1.2課程設(shè)計(jì)能夠?qū)崿F(xiàn)以下功能:</p><p

8、>  設(shè)置信號(hào)量,保證以下四點(diǎn):</p><p>  公交運(yùn)行的時(shí)候售票員不能開車門;</p><p>  公交停下,售票員方可打開車門;</p><p>  公交車門打開時(shí),司機(jī)不能開車;</p><p>  公交車門關(guān)上時(shí),司機(jī)方能啟動(dòng)公交</p><p>  需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說(shuō)明(功能與框圖)<

9、;/p><p><b>  2.1 需求分析</b></p><p>  為了保證公交運(yùn)行的時(shí)候車門不能開,應(yīng)該設(shè)置一個(gè)表示公交運(yùn)行的信號(hào)量,1表示公交運(yùn)行在,0表示車已停下;</p><p>  為了保證車門打開的時(shí)候司機(jī)不能啟動(dòng)公交,所以應(yīng)設(shè)置一個(gè)表示車門是否打開的信號(hào)量,0表示公交門打開,1表示公交門關(guān)上</p><p&g

10、t;  按照以上分析,兩個(gè)信號(hào)量在同一時(shí)刻必定相反,由此得到結(jié)論:設(shè)置一個(gè)信號(hào)量,1表示車停門開,0表示車開門關(guān)</p><p><b>  2.2 數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  Bus類</b></p><p>  成員變量:int flag表示公共的信號(hào)量,1表示車停門開,0表示車開門關(guān)</p&g

11、t;<p><b>  方法:</b></p><p>  public synchronized void open(),表示乘務(wù)員開車門的動(dòng)作</p><p>  public synchronized void drive(),表示司機(jī)啟動(dòng)車輛的動(dòng)作</p><p>  Driver類,繼承于Thread類</p>

12、;<p>  成員變量:private Bus c,表示該司機(jī)所駕駛的公交是c</p><p>  方法:public void run(),執(zhí)行Bus c的driver()方法</p><p>  Conductor類,繼承于Thread類</p><p>  成員變量:private Bus c,表示該司機(jī)所駕駛的公交是c</p>&

13、lt;p>  方法:public void run(),執(zhí)行Bus c的open()方法</p><p><b>  2.3 模塊說(shuō)明</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í)行的過(guò)程中,其他方法不能夠改變?cè)摲椒ㄋ趯?duì)象中所擁有的值,因此保證了時(shí)間的同步性。</p><p>  While(車還在開){等待,運(yùn)用wait()方法</p><p><b>  }</b&g

15、t;</p><p><b>  //車停下了</b></p><p><b>  乘客上下車</b></p><p><b>  車門關(guān)上</b></p><p>  改變信號(hào)量flag為0</p><p>  告訴司機(jī)車門關(guān)上了,可以啟動(dòng)車輛,運(yùn)用n

16、otify()方法</p><p><b>  drive():</b></p><p>  類似于open()方法,方法drive ()具有synchronized關(guān)鍵字,表示該方法在執(zhí)行的過(guò)程中,其他方法不能夠改變?cè)摲椒ㄋ趯?duì)象中所擁有的值,因此保證了時(shí)間的同步性。</p><p>  While(車門還沒(méi)關(guān)){等待,運(yùn)用wa

17、it()方法</p><p><b>  }</b></p><p><b>  //車門關(guān)了</b></p><p><b>  司機(jī)開車</b></p><p>  改變信號(hào)量flag為1</p><p>  車停下,告訴售票員可以開門了,運(yùn)用not

18、ify()方法</p><p><b>  Driver模塊</b></p><p>  設(shè)置count,表示該模擬過(guò)程執(zhí)行的次數(shù),</p><p>  run()方法,執(zhí)行私有成員bus的drive()方法,執(zhí)行count次后停止。</p><p>  Conductor模塊</p><p> 

19、 類似,Driver類,設(shè)置count,表示該模擬過(guò)程執(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>  測(cè)試用例,運(yùn)行結(jié)果與運(yùn)行情況分

35、析;</p><p><b>  運(yùn)行結(jié)果</b></p><p>  通過(guò)數(shù)次重復(fù)性演示,可以看出公交運(yùn)行與公交車門開關(guān)是在同步運(yùn)行的。</p><p><b>  運(yùn)行情況分析</b></p><p>  通過(guò)觀察運(yùn)行結(jié)果,無(wú)論兩個(gè)線程誰(shuí)先啟動(dòng)誰(shuí)后啟用,只要初始狀態(tài)設(shè)置的是“車停門開”,那么一

36、定是售票員Conductor線程先執(zhí)行,或者初始狀態(tài)時(shí)“車開門關(guān)”,那么一定是司機(jī)Driver線程先啟動(dòng)。即:</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>  無(wú)論這里是:</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>  (請(qǐng)注意順序)</b></p><p>  只要flag的初始值固定,那么程序輸出的結(jié)果也是不變的,這剛好體現(xiàn)了同步運(yùn)行這一概念!</p><p><b>  自我評(píng)價(jià)與總結(jié):</b>

39、</p><p>  通過(guò)這次課程設(shè)計(jì),我有以下感觸:</p><p>  Java的Thread類以及synchronized關(guān)鍵字能夠狠好的處理信號(hào)量所引出的一系列問(wèn)題。</p><p>  本程序在不影響功能的前提下,只使用了一個(gè)信號(hào)量便完成了任務(wù),不得不說(shuō)是一個(gè)創(chuàng)新之處。</p><p>  通過(guò)將兩個(gè)同步與互斥的操作open與dri

40、ve封裝在Bus類中,實(shí)現(xiàn)了線程了互斥與同步進(jìn)行。</p><p>  通過(guò)繼承Thread類,并將使Driver與Conductor類實(shí)例公共使用一個(gè)Bus類型變量,實(shí)現(xiàn)了信號(hào)量的共用。</p><p>  本科生課程設(shè)計(jì)成績(jī)?cè)u(píng)定表</p><p>  注:最終成績(jī)以五級(jí)分制記。優(yōu)(90-100分)、良(80-89分)、中(70-79分)、</p>

溫馨提示

  • 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ù)僅提供信息存儲(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)論