




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《操作系統(tǒng)》課程設計報告題目:司機與售票員目錄一、設計思想1.1設計目的1.2需求分析二、概要設計2.1設計內容2.2數據結構及模塊說明2.3開發(fā)環(huán)境與工具三、程序代碼四、運行結果五、心得體會六、參考文獻一、設計思想1.1設計目的掌握信號的使用方法和PV操作的定義,掌握使用PV操作實現進程之間同步和互斥的方法,加深對進程同步互斥概念的理解。1.2需求分析本程序的功能是模擬公車的司機和售票員的開門以及行車的過程,其實也就是一個典型的進程同步互斥問題,其中主要的兩點是1、司機開車的時候,售票員不能開門,(這里體現的是進程的互斥問題)車停之后,由司機通知售票員開門(這里體現的是進程的同步問題);2、車門開著的時候,司機不能開車,等售票員把車門關上之后,由售票員通知司機開車。二、概要設計2.1設計內容創(chuàng)建兩個進程模擬售票員和汽車司機的同步行為,具體設計內容:司機的活動:啟動車輛,正常行車,到站停車。售票員活動:關車門,售票,開車門。當發(fā)車時間到,售票員關好車門后,司機才能啟動車輛,售票員才開始售票。當到站時,司機停穩(wěn)車后,售票員才能打開車門,車上乘客先下車,然后站牌乘客上車。司機與售票員要協同工作:一方面只有售票員把門關好之后司機才可開車,因此售票員關好門之后要通知司機開車,然后售票;另一方面,也只有司機把車停下之后售票員才能開門讓乘客下車和上車,因此,此時司機應通知售票員。汽車當前正在始發(fā)站停車讓乘客讓乘客上車,因此,必須設置一定的信號量來實現他們之間的同步問題。2.2數據結構及模塊說明本程序的設計原理比較簡單,就是兩大部分,一是司機的行車操作過程,另一個是售票員的開車門和關車門(以及售票,本程序不討論售票過程)的過程。把司機與售票員的信號量設置為全局變量,并把客車上的人數:現在人數、下車人數、上車人數設置為全局變量;設置司機與售票員各自的線程??紤]到第一站和最后一站的問題,應單獨處理,故在各自的線程中分情況討論:由于下車的人數是隨機的,設計時考慮到了人數可能會超過客車的最大上限的問題。具體的思路是下面的圖示。2.3開發(fā)環(huán)境與工具系統(tǒng)平臺:Windows7實現語言:C++開發(fā)工具:VC++6.0三、程序代碼#include<stdlib.h>#include<stdio.h>#include<windows.h>#include<time.h>#defineTotal_num50//客車的最大容量#defineTotal_stop4//總的站數//全局變量intRecent_num=0;//某一時刻的客車上的人數intGet_on_num;//上車的人數intGet_off_num;//下車的人數intstop=1;//客車到達路線的站數HANDLESemaphore_driver;//Driver的信號量HANDLESemaphore_conductor;//Conductor的信號量//產生一定范圍的隨機數,可避免下面程序的判斷是否超出客車的最大容量問題intGet_random(intmin,intmax){inta;srand((int)time(0));while(1){a=rand()%(Total_num+1);if(a>=min&&a<=max)returna;}}//Driver的線程DWORDWINAPIThread_Driver(LPVOIDDriver){while(stop<=Total_num){if(stop==Total_stop){WaitForSingleObject(Semaphore_driver,INFINITE);printf("終點站到了\n");printf("最后乘客:%d名\n",Recent_num);ReleaseSemaphore(Semaphore_conductor,1,NULL);return0;}else{if(stop==1)printf("第%d站出發(fā)\n啟動車輛\n",stop);elseprintf("第%d站到了\n",stop);if(stop!=1)printf("到站停車\n");ReleaseSemaphore(Semaphore_conductor,1,NULL);//增加信號量WaitForSingleObject(Semaphore_driver,INFINITE);printf("正常行車\n");ReleaseSemaphore(Semaphore_conductor,1,NULL);}Sleep(1000);}return0;}//Conductor的線程DWORDWINAPIThread_Conductor(LPVOIDConductor){while(1){if(stop<Total_stop){WaitForSingleObject(Semaphore_conductor,INFINITE);if(stop==1){Get_on_num=Get_random(0,Total_num-Recent_num);printf("有%d名乘客上車\n",Get_on_num);Recent_num+=Get_on_num;}else{printf("開車門\n");Get_off_num=Get_random(0,Recent_num);printf("有%d名乘客下車\n",Get_off_num,stop);Sleep(1000);//避免了時間的問題帶來的不是隨機數的現象Recent_num-=Get_off_num;Get_on_num=Get_random(0,Total_num-Recent_num);printf("有%d名乘客上車\n",Get_on_num,stop);Recent_num+=Get_on_num;}printf("此時乘客:%d名\n",Recent_num);printf("關車門\n");ReleaseSemaphore(Semaphore_driver,1,NULL);WaitForSingleObject(Semaphore_conductor,INFINITE);printf("售票\n");printf("\n\n\n\n");stop++;}if(stop==Total_stop){ReleaseSemaphore(Semaphore_driver,1,NULL);WaitForSingleObject(Semaphore_conductor,INFINITE);printf("開車門\n");printf("所有乘客下車\n");return0;}Sleep(1000);}return0;}//主函數intmain(){HANDLEDriver;HANDLEConductor;Semaphore_driver=CreateSemaphore(NULL,0,1,"semaphore_driver");//創(chuàng)建Driver的信號量Semaphore_conductor=CreateSemaphore(NULL,0,1,"semaphore_conductor");//創(chuàng)建Conductor的信號量Driver=CreateThread(NULL,0,Thread_Driver,&Driver,0,NULL);//創(chuàng)建Driver的線程Conductor=CreateThread(NULL,0,Thread_Conductor,&Conductor,0,NULL);//創(chuàng)建Conductor的線程CloseHandle(Driver);//關閉Driver的線程CloseHandle(Conductor);//關閉Conductor的線程//GetLastError();while(1);system("pause");return0;}四、運行結果五、心得體會1、因為司機與售票員是兩條單獨處理的線程。程序先對司機的線程進行設計,接著再進行售票員的線程設計。因為兩者是需要相互協調,又先后順序的,所以編起程序來比較復雜,而且很亂,尤其對于第一次接觸的我們而言。2、上下車的人數是隨機的,所以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年寧波大學附屬人民醫(yī)院招聘編外人員1人考前自測高頻考點模擬試題帶答案詳解
- 公司貨運代辦業(yè)務員基礎考核試卷及答案
- 公司印后成型工入職考核試卷及答案
- 年產5000噸高性能碳纖維及復合材料項目風險評估報告
- 大眾控煙知識培訓通知課件
- 公司擠出拉制模具工理念考核試卷及答案
- 大眾專業(yè)知識培訓心得課件
- 2025遼寧鞍山市立山區(qū)教育局面向應屆畢業(yè)生校園招聘2人模擬試卷及答案詳解(各地真題)
- 公司選剝混繭工工作流程認知考核試卷及答案
- 工程質量改進與提升方案
- 2025年貴州高考生物試卷真題及答案詳解(精校打印版)
- 2025四川成都高新投資集團有限公司選聘中高層管理人員4人筆試參考題庫附答案解析
- 湖南省九校聯盟2026屆高三上學期9月第一次聯考物理試題(含答案)
- 水利工程水利工程施工技術規(guī)范
- 健康安全緊急培訓內容課件
- 畜牧獸醫(yī)職稱考試題庫及答案
- 安東尼奧高迪設計大師
- 混凝土施工技術難點及相應解決方案,通用
- 初中勵志英語諺語
- 2023年云南曲靖市交通建設投資集團有限公司招聘筆試題庫及答案解析
- 招工簡章模板(可編輯)
評論
0/150
提交評論