版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 操作系統(tǒng)課程設(shè)計報告</p><p> 一 實驗題目:理發(fā)師問題:理發(fā)店由一個等待室和一個理發(fā)室組成,等待室有N把椅子而理發(fā)室只有一把理發(fā)椅。如果沒有顧客,理發(fā)師就會在理發(fā)椅睡覺。如果一個顧客走進(jìn)理發(fā)店,發(fā)現(xiàn)理發(fā)師正在理發(fā),如果有空椅子可坐,他就坐下來等,如果沒有空椅子,他就離開;如果理發(fā)師正在理發(fā)椅上睡覺,就喚醒理發(fā)師進(jìn)行理發(fā)。</p><p><b>
2、 二 實驗?zāi)康模?lt;/b></p><p> 掌握基本的同步與互斥算法</p><p> 學(xué)會用pv操作來描述算法思想</p><p> 真正理解信號量的作用,理解臨界區(qū)</p><p> 掌握相關(guān)的API的使用方法</p><p> 了解Windows中的多線程的并發(fā)執(zhí)行機(jī)制,實現(xiàn)進(jìn)程的同步與互
3、斥</p><p><b> 三 實驗要求:</b></p><p> 采用系統(tǒng)調(diào)用信號量、p、v操作來描述解決理發(fā)師問題的算法思想,并編程實現(xiàn)該算法。</p><p><b> 四 實驗環(huán)境</b></p><p> 操作系統(tǒng):Windows 7</p><p>
4、 編譯環(huán)境:VS2008</p><p><b> 五PV操作代碼</b></p><p> int waiting=0 ; //顧客數(shù) </p><p> int chairs=n; //椅子數(shù) </p><p> semaphore customers=0, barbers=0,mutex=1; </p
5、><p><b> barber() </b></p><p><b> { </b></p><p> while(TRUE); //理完一人,還有顧客嗎? </p><p> P(cutomers); //無顧客則理發(fā)師睡眠 </p><p> P(mutex);
6、//進(jìn)程互斥 </p><p> waiting := waiting – 1; </p><p> V(barbers); //用一個理發(fā)師去為這個顧客理發(fā) </p><p> V(mutex); //開放臨界區(qū) </p><p> cut-hair( ); //理發(fā)} </p><p> customer
7、() </p><p><b> { </b></p><p> P(mutex); //進(jìn)程互斥 </p><p> if (waiting) </p><p> { waiting := waiting+1; </p><p> V(customers); //之前無顧客,此時有顧客
8、時,喚醒理發(fā)師 </p><p> V(mutex); //開放臨界區(qū) </p><p> P(barbers); //無理發(fā)師, 顧客等待 </p><p> get-haircut( ); //顧客理發(fā)完走下理發(fā)椅 } </p><p><b> else </b></p><p>
9、 V(mutex); //沒座位了}</p><p><b> 六 源代碼</b></p><p> #include <windows.h></p><p> #include <conio.h></p><p> #include <stdio.h></p>
10、<p> #include <stdlib.h></p><p> #define CUSNUM 8</p><p> #define CHAIRS 5</p><p> char customer_name[]="WAIT_CUSTOMERS";</p><p> char barker_
11、name[]="SLEEP_BARKER";</p><p> char cutting_name[]="CUTTING_HAIR";</p><p> char mutex_name[]="MUTEX_SLEEP_BARKER";</p><p> HANDLE customer,barker,cu
12、tting;</p><p> HANDLE mutex;</p><p> BOOL IsOpen=true;</p><p> DWORD WINAPI Barker( LPVOID lpParam );</p><p> DWORD WINAPI Customer( LPVOID lpParam );</p>&l
13、t;p> int waitting = 0;</p><p> int finishNum = 0;</p><p> void cutting_hair()</p><p><b> {</b></p><p> Sleep(rand()%3000);</p><p> pri
14、ntf("理發(fā)師已完成理發(fā).\n");</p><p> finishNum++;</p><p> ReleaseSemaphore(cutting,1,NULL);</p><p> WaitForSingleObject(customer,INFINITE);</p><p> if ( waitting==
15、0 && finishNum>=6)</p><p><b> {</b></p><p> IsOpen = false;</p><p> ReleaseMutex(mutex);</p><p> printf("理發(fā)師已理完至少六人,且沒人在等待,所以理發(fā)店關(guān)門.\n&qu
16、ot;);</p><p><b> }</b></p><p><b> else</b></p><p> ReleaseMutex(mutex);</p><p><b> }</b></p><p> void hair_cut(int
17、 i)</p><p><b> {</b></p><p> printf("顧客%d 已經(jīng)完成理發(fā).\n\n",i);</p><p> WaitForSingleObject(cutting,INFINITE);</p><p> printf("顧客%d 完成理發(fā)離開了.\n
18、\n",i);</p><p><b> }</b></p><p> VOID main( VOID ) </p><p><b> { </b></p><p> DWORD dwThreadId, dwThrdParam = 1; </p><p>
19、 HANDLE hBarkerThread;</p><p> HANDLE hCustomerThread[8];</p><p> customer=CreateSemaphore(NULL,0,CUSNUM,customer_name);</p><p> barker=CreateSemaphore(NULL,0,1,barker_name);<
20、/p><p> cutting=CreateSemaphore(NULL,0,1,cutting_name);</p><p> mutex=CreateMutex(NULL,FALSE,mutex_name);</p><p> hBarkerThread = CreateThread( </p><p> NULL,
21、 </p><p> 0, </p><p> Barker, </p><p> &dwThrdParam, </p><p> 0, &
22、lt;/p><p> &dwThreadId); </p><p> int num[8];</p><p><b> int i=1;</b></p><p> while(i<=CUSNUM)</p><p><b> {</b
23、></p><p><b> num[i]=i;</b></p><p> hCustomerThread[i-1] = CreateThread( </p><p> NULL, </p><p> 0, &l
24、t;/p><p> Customer,</p><p> &num[i], </p><p> 0, </p><p> &dwThreadId); </p><p><b> i++;&
25、lt;/b></p><p><b> }</b></p><p> if (hBarkerThread == NULL) </p><p><b> {</b></p><p> printf("創(chuàng)建理發(fā)師線程失敗");</p><p>&
26、lt;b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> WaitForSingleObject(hBarkerThread,INFINITE);</p><p> CloseHandle( hBarke
27、rThread );</p><p><b> }</b></p><p><b> } </b></p><p> DWORD WINAPI Barker( LPVOID lpParam ) </p><p><b> { </b></p><p&
28、gt; while(IsOpen)</p><p><b> {</b></p><p> WaitForSingleObject(customer,INFINITE);</p><p> WaitForSingleObject(mutex,INFINITE);</p><p> waitting = wait
29、ting - 1;</p><p> ReleaseSemaphore(barker,1,NULL);</p><p> ReleaseMutex(mutex);</p><p> cutting_hair();</p><p><b> }</b></p><p><b>
30、return 0;</b></p><p><b> }</b></p><p> DWORD WINAPI Customer( LPVOID lpParam ) </p><p><b> {</b></p><p> int i=*(int*)lpParam;</p&
31、gt;<p> Sleep(rand()%45000);</p><p> LONG WaitingNum;</p><p> if (!IsOpen)</p><p><b> {</b></p><p> printf("理發(fā)店已經(jīng)關(guān)門了.\n");</p>
32、<p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> WaitForSingleObject(mutex,INFINITE);</p><p> if(waitting<CHA
33、IRS)</p><p><b> {</b></p><p> printf("顧客%d 進(jìn)店且等待.\n\n",i);</p><p> waitting = waitting + 1;</p><p> ReleaseSemaphore(customer,1,&WaitingNu
34、m);</p><p> ReleaseMutex(mutex);</p><p> WaitForSingleObject(barker,INFINITE);</p><p> printf("理發(fā)師準(zhǔn)備為顧客%d理發(fā).\n",i);</p><p> hair_cut(i);</p><p&
35、gt;<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("這兒沒有位置給顧客%d ,所以他離開了.",i);</p><p> ReleaseMutex(mute
36、x);</p><p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> } </b></p><p> 七 運(yùn)行結(jié)果截圖<
37、;/p><p><b> 八 流程圖</b></p><p><b> 九 課程設(shè)計總結(jié)</b></p><p> 這次課設(shè)收獲很多,之前在課上學(xué)的都是那些純理論的東西,感覺無法跟實際相連。所以剛開始拿到這題目感到無從下手,但是后來不斷的通過上網(wǎng)搜索和同學(xué)的討論才有點(diǎn)眉目,剛開始我就想開始寫程序,但發(fā)現(xiàn)問題很多,后來在同
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(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è)計模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告
- 課程設(shè)計報告--操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告
- 《操作系統(tǒng)》課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計 (2)
- 操作系統(tǒng)課程設(shè)計-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告2014217151
- 《操作系統(tǒng)原理》課程設(shè)計報告
- 操作系統(tǒng)程序設(shè)計課程設(shè)計報告-操作系統(tǒng)模擬實現(xiàn)
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計---磁盤調(diào)度報告
- 操作系統(tǒng)課程設(shè)計實驗報告
評論
0/150
提交評論