




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 課程實(shí)驗(yàn)報(bào)告 題 目 計(jì)算機(jī)操作系統(tǒng)理發(fā)師問題 姓 名 潘 * 學(xué) 號(hào) 2013 * 年級(jí)專業(yè) 2013級(jí)* 指導(dǎo)教師 彭 * 華 201*年 1*月 30 日一 題目假設(shè)有個(gè)理發(fā)店,只有一個(gè)理發(fā)師和N張可供顧客等待理發(fā)的椅子,如果沒有顧客,則理發(fā)師睡覺,如果有一個(gè)顧客進(jìn)入理發(fā)店發(fā)現(xiàn)理發(fā)師在睡覺,則把他叫醒,試用信號(hào)量設(shè)計(jì)一個(gè)協(xié)調(diào)理發(fā)師和顧客的程序。二 PV操作偽代碼C語言的偽代碼實(shí)現(xiàn):int waiting=0 ; /等候理發(fā)的顧客數(shù) int chairs=n; /為顧客準(zhǔn)備的椅子數(shù) semaphore customers=0,&
2、#160;barbers=0,mutex=1; barber() while(TRUE); /理完一人,還有顧客嗎? P(cutomers); /若無顧客,理發(fā)師睡眠 P(mutex); /進(jìn)程互斥 waiting -= 1;/等候顧客數(shù)少一個(gè) V(barbers); /理發(fā)師去為一個(gè)顧客理發(fā) V(mutex); /開放臨界區(qū) cut-hair(); /正在理發(fā) customer() P(mutex
3、); /進(jìn)程互斥 if(waiting) waiting += 1; / 等候顧客數(shù)加1 V(customers); /必要的話喚醒理發(fā)師 V(mutex); /開放臨界區(qū) P(barbers); /無理發(fā)師, 顧客坐著養(yǎng)神 get-haircut( ); /一個(gè)顧客坐下等理/ else V(mutex); /人滿了,離開 三 程序流程圖顧客模塊:理發(fā)師模塊:四 源程序的實(shí)現(xiàn)因?yàn)楸救藢?duì)C+的多線程庫函數(shù)不了解,于是使用JAVA實(shí)現(xiàn)理
4、發(fā)師問題,假設(shè)有5張可供顧客理發(fā)的椅子:package com.swxy;import java.util.concurrent.Semaphore;/導(dǎo)入Semaphore,用于控制進(jìn)程同步互斥的量。public class BarberShop static int cnt = 0;/ 顧客static int MAX = 5;/ 假設(shè)5張可供顧客理發(fā)的椅子static int busy = 0;static Semaphore mutex = new Semaphore(1);/ 臨界區(qū)互斥訪問信號(hào)量(二進(jìn)制信號(hào)量),相當(dāng)于互斥鎖。public static void main(Stri
5、ng args) throws InterruptedException BarberShop bar = new BarberShop();for (int i = 1; i <= 20; i+) / 假設(shè)一共有20個(gè)顧客來訪new Thread(new Barber(bar, i).start();Thread.sleep(int) (400 - Math.random() * 300);/ 使得當(dāng)前線程休眠 隨機(jī)0-0.1spublic synchronized boolean isFull() if (cnt = MAX) return true;return false;pub
6、lic synchronized boolean isEmpty() if (cnt = 0) return true;return false;public synchronized boolean isBusy() if (busy = 1) return true;return false;public void Gobar(int index) throws InterruptedException System.out.println("顧客 " + index + " 來了");cnt+;/ 判斷是否滿if (isFull() System.
7、out.println("沒有可供顧客等待的椅子了," + "顧客 " + index + " 離開了");cnt-; else if (busy = 1) System.out.println("顧客" + index + " 正在等待理發(fā)師");mutex.acquire();/ 信號(hào)量減操作,防止其他進(jìn)程再進(jìn)入synchronized (this) while (busy = 1) / 若有人在理發(fā),則等待wait();if (cnt = 1) System.out.println(&qu
8、ot;現(xiàn)在理發(fā)店只有顧客" + index + ",理發(fā)師是清醒的");busy = 1;System.out.println("顧客" + index + " 正在理發(fā)");Thread.sleep(1000);System.out.println("顧客" + index + " 離開了");cnt-;mutex.release();/ 信號(hào)量加操作synchronized (this) busy = 0;notify();/ 喚醒if (cnt = 0) System.out.p
9、rintln("沒有顧客了,理發(fā)師開始睡覺");class Barber implements Runnable BarberShop ob;int index;public Barber(BarberShop ob, int i) this.ob = ob;index = i;public void run() / TODO Auto-generated method stubtry ob.Gobar(index); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTr
10、ace();五 運(yùn)行結(jié)果顧客 1 來了現(xiàn)在理發(fā)店只有顧客1,理發(fā)師是清醒的顧客1 正在理發(fā)顧客 2 來了顧客2 正在等待理發(fā)師顧客 3 來了顧客3 正在等待理發(fā)師顧客 4 來了顧客4 正在等待理發(fā)師顧客1 離開了顧客2 正在理發(fā)顧客 5 來了顧客5 正在等待理發(fā)師顧客 6 來了沒有可供顧客等待的椅子了,顧客 6 離開了顧客 7 來了沒有可供顧客等待的椅子了,顧客 7 離開了顧客 8 來了沒有可供顧客等待的椅子了,顧客 8 離開了顧客2 離開了顧客3 正在理發(fā)顧客 9 來了顧客9 正在等待理發(fā)師顧客 10 來了沒有可供顧客等待的椅子了,顧客 10 離開了顧客 11 來了沒有可供顧客等待的椅子了,
11、顧客 11 離開了顧客3 離開了顧客4 正在理發(fā)顧客 12 來了顧客12 正在等待理發(fā)師顧客 13 來了沒有可供顧客等待的椅子了,顧客 13 離開了顧客 14 來了沒有可供顧客等待的椅子了,顧客 14 離開了顧客 15 來了沒有可供顧客等待的椅子了,顧客 15 離開了顧客4 離開了顧客5 正在理發(fā)顧客 16 來了顧客16 正在等待理發(fā)師顧客 17 來了沒有可供顧客等待的椅子了,顧客 17 離開了顧客 18 來了沒有可供顧客等待的椅子了,顧客 18 離開了顧客 19 來了沒有可供顧客等待的椅子了,顧客 19 離開了顧客5 離開了顧客9 正在理發(fā)顧客 20 來了顧客20 正在等待理發(fā)師顧客9 離開了顧客12 正在理發(fā)顧客12 離開了顧
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物醫(yī)療設(shè)備維護(hù)員考試試卷及答案
- 環(huán)保工程師(噪聲控制)崗位面試問題及答案
- 機(jī)械加工設(shè)備維護(hù)計(jì)劃員崗位面試問題及答案
- 研發(fā)機(jī)構(gòu)股權(quán)整體轉(zhuǎn)讓與知識(shí)產(chǎn)權(quán)共享合同范本
- 電子商務(wù)股東出資入股合同
- 高新技術(shù)企業(yè)股權(quán)轉(zhuǎn)讓及增資擴(kuò)股綜合協(xié)議
- 互聯(lián)網(wǎng)公司股權(quán)轉(zhuǎn)讓及業(yè)績(jī)承諾對(duì)賭協(xié)議
- 股權(quán)激勵(lì)與員工股權(quán)激勵(lì)股權(quán)激勵(lì)調(diào)整合同
- 環(huán)保項(xiàng)目合同終止及環(huán)境修復(fù)責(zé)任協(xié)議
- 新能源企業(yè)股東股份合作與技術(shù)開發(fā)合同
- 圖書館捐贈(zèng)活動(dòng)實(shí)施流程
- 《數(shù)字貿(mào)易》課程教學(xué)大綱
- 會(huì)展策劃考試試題及答案
- 2025零基礎(chǔ)應(yīng)用DeepSeek手冊(cè)
- 建筑節(jié)能與環(huán)保培訓(xùn)課件
- 微弱的光亮(2024年山東煙臺(tái)中考語文試卷記敘文閱讀試題)
- 2024高考物理一輪復(fù)習(xí)專題93機(jī)械振動(dòng)和機(jī)械波練習(xí)含解析新人教版
- 廣西現(xiàn)代物流集團(tuán)招聘筆試沖刺題2025
- 中職班主任班級(jí)管理經(jīng)驗(yàn)分享
- 大學(xué)英語六級(jí)大綱詞匯正序版
- 《計(jì)算機(jī)圖形學(xué)》課后習(xí)題參考答案
評(píng)論
0/150
提交評(píng)論