版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《操作系統(tǒng)》課程設(shè)計(jì)報(bào)告題目:司機(jī)與售票員目錄一、設(shè)計(jì)思想1.1設(shè)計(jì)目的1.2需求分析二、概要設(shè)計(jì)2.1設(shè)計(jì)內(nèi)容2.2數(shù)據(jù)結(jié)構(gòu)及模塊說明2.3開發(fā)環(huán)境與工具三、程序代碼四、運(yùn)行結(jié)果五、心得體會六、參考文獻(xiàn)一、設(shè)計(jì)思想1.1設(shè)計(jì)目的掌握信號的使用方法和PV操作的定義,掌握使用PV操作實(shí)現(xiàn)進(jìn)程之間同步和互斥的方法,加深對進(jìn)程同步互斥概念的理解。1.2需求分析本程序的功能是模擬公車的司機(jī)和售票員的開門以及行車的過程,其實(shí)也就是一個(gè)典型的進(jìn)程同步互斥問題,其中主要的兩點(diǎn)是1、司機(jī)開車的時(shí)候,售票員不能開門,(這里體現(xiàn)的是進(jìn)程的互斥問題)車停之后,由司機(jī)通知售票員開門(這里體現(xiàn)的是進(jìn)程的同步問題);2、車門開著的時(shí)候,司機(jī)不能開車,等售票員把車門關(guān)上之后,由售票員通知司機(jī)開車。二、概要設(shè)計(jì)2.1設(shè)計(jì)內(nèi)容創(chuàng)建兩個(gè)進(jìn)程模擬售票員和汽車司機(jī)的同步行為,具體設(shè)計(jì)內(nèi)容:司機(jī)的活動(dòng):啟動(dòng)車輛,正常行車,到站停車。售票員活動(dòng):關(guān)車門,售票,開車門。當(dāng)發(fā)車時(shí)間到,售票員關(guān)好車門后,司機(jī)才能啟動(dòng)車輛,售票員才開始售票。當(dāng)?shù)秸緯r(shí),司機(jī)停穩(wěn)車后,售票員才能打開車門,車上乘客先下車,然后站牌乘客上車。司機(jī)與售票員要協(xié)同工作:一方面只有售票員把門關(guān)好之后司機(jī)才可開車,因此售票員關(guān)好門之后要通知司機(jī)開車,然后售票;另一方面,也只有司機(jī)把車停下之后售票員才能開門讓乘客下車和上車,因此,此時(shí)司機(jī)應(yīng)通知售票員。汽車當(dāng)前正在始發(fā)站停車讓乘客讓乘客上車,因此,必須設(shè)置一定的信號量來實(shí)現(xiàn)他們之間的同步問題。2.2數(shù)據(jù)結(jié)構(gòu)及模塊說明本程序的設(shè)計(jì)原理比較簡單,就是兩大部分,一是司機(jī)的行車操作過程,另一個(gè)是售票員的開車門和關(guān)車門(以及售票,本程序不討論售票過程)的過程。把司機(jī)與售票員的信號量設(shè)置為全局變量,并把客車上的人數(shù):現(xiàn)在人數(shù)、下車人數(shù)、上車人數(shù)設(shè)置為全局變量;設(shè)置司機(jī)與售票員各自的線程??紤]到第一站和最后一站的問題,應(yīng)單獨(dú)處理,故在各自的線程中分情況討論:由于下車的人數(shù)是隨機(jī)的,設(shè)計(jì)時(shí)考慮到了人數(shù)可能會超過客車的最大上限的問題。具體的思路是下面的圖示。2.3開發(fā)環(huán)境與工具系統(tǒng)平臺:Windows7實(shí)現(xiàn)語言:C++開發(fā)工具:VC++6.0三、程序代碼#include<stdlib.h>#include<stdio.h>#include<windows.h>#include<time.h>#defineTotal_num50//客車的最大容量#defineTotal_stop4//總的站數(shù)//全局變量intRecent_num=0;//某一時(shí)刻的客車上的人數(shù)intGet_on_num;//上車的人數(shù)intGet_off_num;//下車的人數(shù)intstop=1;//客車到達(dá)路線的站數(shù)HANDLESemaphore_driver;//Driver的信號量HANDLESemaphore_conductor;//Conductor的信號量//產(chǎn)生一定范圍的隨機(jī)數(shù),可避免下面程序的判斷是否超出客車的最大容量問題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("終點(diǎn)站到了\n");printf("最后乘客:%d名\n",Recent_num);ReleaseSemaphore(Semaphore_conductor,1,NULL);return0;}else{if(stop==1)printf("第%d站出發(fā)\n啟動(dòng)車輛\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);//避免了時(shí)間的問題帶來的不是隨機(jī)數(shù)的現(xiàn)象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("此時(shí)乘客:%d名\n",Recent_num);printf("關(guān)車門\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;}//主函數(shù)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);//關(guān)閉Driver的線程CloseHandle(Conductor);//關(guān)閉Conductor的線程//GetLastError();while(1);system("pause");return0;}四、運(yùn)行結(jié)果五、心得體會1、因?yàn)樗緳C(jī)與售票員是兩條單獨(dú)處理的線程。程序先對司機(jī)的線程進(jìn)行設(shè)計(jì),接著再進(jìn)行售票員的線程設(shè)計(jì)。因?yàn)閮烧呤切枰嗷f(xié)調(diào),又先后順序的,所以編起程序來比較復(fù)雜,而且很亂,尤其對于第一次接觸的我們而言。2、上下車的人數(shù)是隨機(jī)的,所以
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 懷化迎豐東路,號,門面轉(zhuǎn)租賃合同
- 商鋪?zhàn)夥繀f(xié)議租賃合同
- 醫(yī)療廢物處置中心運(yùn)營合同
- 電子競技項(xiàng)目贊助與運(yùn)營合同
- 旅游景區(qū)開發(fā)與運(yùn)營管理實(shí)戰(zhàn)手冊
- 物流行業(yè)智慧物流園設(shè)計(jì)與運(yùn)營方案
- 教育信息化應(yīng)用操作手冊
- 鄉(xiāng)村休閑農(nóng)業(yè)項(xiàng)目運(yùn)營指南
- 服裝行業(yè)智能設(shè)計(jì)與管理軟件開發(fā)方案
- 財(cái)務(wù)管理團(tuán)隊(duì)建設(shè)與培訓(xùn)方案
- 2025年1月八省聯(lián)考河南新高考物理試卷真題(含答案詳解)
- 物業(yè)管理服務(wù)人員配備及崗位職責(zé)
- 鄭州2024年河南鄭州市惠濟(jì)區(qū)事業(yè)單位80人筆試歷年參考題庫頻考點(diǎn)試題附帶答案詳解
- 深靜脈血栓的手術(shù)預(yù)防
- 【9道期末】安徽省合肥市廬陽區(qū)2023-2024學(xué)年九年級上學(xué)期期末道德與法治試題
- 腹腔鏡全胃切除手術(shù)配合
- 2024-2030年中國非物質(zhì)文化遺產(chǎn)市場前景調(diào)研及投資風(fēng)險(xiǎn)分析報(bào)告
- 酒店員工人事制度培訓(xùn)
- 2023年山西省公務(wù)員錄用考試《行測》真題及答案解析
- 醫(yī)美整形退款協(xié)議書范本下載
- 國培培訓(xùn)成果匯報(bào)
評論
0/150
提交評論