2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論