實例:同步問題.ppt_第1頁
實例:同步問題.ppt_第2頁
實例:同步問題.ppt_第3頁
實例:同步問題.ppt_第4頁
實例:同步問題.ppt_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實例:同步問題,同步問題1:理發(fā)師問題,一個理發(fā)店由一個有幾張椅子的等待室和一個放有一張理發(fā)椅的理發(fā)室組成。 問題分析: 題目中要求描述理發(fā)師和顧客的行為,因此需要兩類進(jìn)程Barber ()和Customer()分別描述理發(fā)師和顧客的行為。當(dāng)理發(fā)師看報時顧客進(jìn)來需要喚醒理發(fā)師為其理發(fā),當(dāng)有顧客時理發(fā)師為其理發(fā),沒有的時候理發(fā)師看報,因此理發(fā)師和顧客之間是同步的關(guān)系,由于每次理發(fā)師只能為一個人理發(fā),且可供等侯的椅子有限只有n個,即理發(fā)師和椅子是臨界資源,所以顧客之間是互斥的關(guān)系。,同步問題1:理發(fā)師問題,1 若沒有要理發(fā)的顧客,則理發(fā)師去睡覺;2 若一顧客進(jìn)入理發(fā)店,理發(fā)師正在為別人理發(fā),且等待

2、室有空椅子,則該顧客就找張椅子按順序坐下;3 若一顧客進(jìn)入理發(fā)店,理發(fā)師在睡覺,則叫醒理發(fā)師為該顧客理發(fā);4 若一顧客進(jìn)入理發(fā)店且所有椅子都被占用了,則該顧客就離開。,同步問題1:理發(fā)師問題,互斥信號量:mutex ,初始值為1; 信號量customers用來記錄等候理發(fā)的顧客數(shù),并用作阻塞理發(fā)師進(jìn)程,初值為0; barbers用來記錄正在等候顧客的理發(fā)師數(shù),并用作阻塞顧客進(jìn)程,初值為0; 這里barbers只有兩種取值, 0或1; 臨界變量:waiting由理發(fā)師進(jìn)程和顧客進(jìn)程共同訪問,用來記錄在椅子上等著的顧客數(shù);,同步問題1:理發(fā)師問題,var waiting : integer:=0;

3、 /*等候理發(fā)的顧客數(shù)*/ CHAIRS:integer:=n; /*為顧客準(zhǔn)備的椅子數(shù)*/ VAR customers, barbers,mutex : semaphore:=0,0,1; Procedure barber; begin while(TRUE); /*理完一人,還有顧客嗎?*/ P(cutomers); /*若無顧客,理發(fā)師睡眠*/ P(mutex); /*進(jìn)程互斥*/ waiting := waiting 1; /*等候顧客數(shù)少一個*/ V(barbers); /*理發(fā)師去為一個顧客理發(fā)*/ V(mutex); /*開放臨界區(qū)*/ cut-hair( ); /*正在理發(fā)*/

4、 end;,同步問題1:理發(fā)師問題,procedure customer begin P(mutex); /*進(jìn)程互斥*/ if customersn then waiting := waiting+1; /* 等候顧客數(shù)加1*/ V(customers); /*必要的話喚醒理發(fā)師*/ V(mutex); /*開放臨界區(qū)*/ P(barbers); /*無理發(fā)師, 顧客坐著養(yǎng)神*/ get-haircut( ); /*一個顧客坐下等理發(fā)*/ else V(mutex); /*人滿了,走吧!*/ end;,同步問題2,一家四口父親、母親、兒子、女兒,現(xiàn)有一個盤子,父親只往盤子里放蘋果,母親只往盤

5、子里放桔子,兒子只吃桔子,女兒只吃蘋果。盤子中只能放一只水果。請用信號量機制分別為父親、母親、兒子、女兒編寫程序,使他們不發(fā)生沖突。,同步問題2,解: semaphore mutex,apple,orage,empty; mutex.value=1; apple . value=0; orage .value = 0; empty . value = 1 ; Void father() Wait(empty); wait(mutex); put an apple on the disk; signal(mutex); signal(apple); ,同步問題2,Void mather() Wait(empty); wait(mutex); put an orange on the disk; signal(mutex); signal(orange); ,同步問題2,Void son() Wait(apple); Wait(mutex); Get an apple from disk; Signal(mutex); Signal(empty); ,同步問題2,Void dau

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論