




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 課程實驗報告 題 目 計算機操作系統理發師問題 姓 名 潘 * 學 號 2013 * 年級專業 2013級* 指導教師 彭 * 華 201*年 1*月 30 日一 題目假設有個理發店,只有一個理發師和N張可供顧客等待理發的椅子,如果沒有顧客,則理發師睡覺,如果有一個顧客進入理發店發現理發師在睡覺,則把他叫醒,試用信號量設計一個協調理發師和顧客的程序。二 PV操作偽代碼C語言的偽代碼實現:int waiting=0 ; /等候理發的顧客數 int chairs=n; /為顧客準備的椅子數 semaphore customers=0,&
2、#160;barbers=0,mutex=1; barber() while(TRUE); /理完一人,還有顧客嗎? P(cutomers); /若無顧客,理發師睡眠 P(mutex); /進程互斥 waiting -= 1;/等候顧客數少一個 V(barbers); /理發師去為一個顧客理發 V(mutex); /開放臨界區 cut-hair(); /正在理發 customer() P(mutex
3、); /進程互斥 if(waiting) waiting += 1; / 等候顧客數加1 V(customers); /必要的話喚醒理發師 V(mutex); /開放臨界區 P(barbers); /無理發師, 顧客坐著養神 get-haircut( ); /一個顧客坐下等理/ else V(mutex); /人滿了,離開 三 程序流程圖顧客模塊:理發師模塊:四 源程序的實現因為本人對C+的多線程庫函數不了解,于是使用JAVA實現理
4、發師問題,假設有5張可供顧客理發的椅子:package com.swxy;import java.util.concurrent.Semaphore;/導入Semaphore,用于控制進程同步互斥的量。public class BarberShop static int cnt = 0;/ 顧客static int MAX = 5;/ 假設5張可供顧客理發的椅子static int busy = 0;static Semaphore mutex = new Semaphore(1);/ 臨界區互斥訪問信號量(二進制信號量),相當于互斥鎖。public static void main(Stri
5、ng args) throws InterruptedException BarberShop bar = new BarberShop();for (int i = 1; i <= 20; i+) / 假設一共有20個顧客來訪new Thread(new Barber(bar, i).start();Thread.sleep(int) (400 - Math.random() * 300);/ 使得當前線程休眠 隨機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 + " 正在等待理發師");mutex.acquire();/ 信號量減操作,防止其他進程再進入synchronized (this) while (busy = 1) / 若有人在理發,則等待wait();if (cnt = 1) System.out.println(&qu
8、ot;現在理發店只有顧客" + index + ",理發師是清醒的");busy = 1;System.out.println("顧客" + index + " 正在理發");Thread.sleep(1000);System.out.println("顧客" + index + " 離開了");cnt-;mutex.release();/ 信號量加操作synchronized (this) busy = 0;notify();/ 喚醒if (cnt = 0) System.out.p
9、rintln("沒有顧客了,理發師開始睡覺");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();五 運行結果顧客 1 來了現在理發店只有顧客1,理發師是清醒的顧客1 正在理發顧客 2 來了顧客2 正在等待理發師顧客 3 來了顧客3 正在等待理發師顧客 4 來了顧客4 正在等待理發師顧客1 離開了顧客2 正在理發顧客 5 來了顧客5 正在等待理發師顧客 6 來了沒有可供顧客等待的椅子了,顧客 6 離開了顧客 7 來了沒有可供顧客等待的椅子了,顧客 7 離開了顧客 8 來了沒有可供顧客等待的椅子了,顧客 8 離開了顧客2 離開了顧客3 正在理發顧客 9 來了顧客9 正在等待理發師顧客 10 來了沒有可供顧客等待的椅子了,顧客 10 離開了顧客 11 來了沒有可供顧客等待的椅子了,
11、顧客 11 離開了顧客3 離開了顧客4 正在理發顧客 12 來了顧客12 正在等待理發師顧客 13 來了沒有可供顧客等待的椅子了,顧客 13 離開了顧客 14 來了沒有可供顧客等待的椅子了,顧客 14 離開了顧客 15 來了沒有可供顧客等待的椅子了,顧客 15 離開了顧客4 離開了顧客5 正在理發顧客 16 來了顧客16 正在等待理發師顧客 17 來了沒有可供顧客等待的椅子了,顧客 17 離開了顧客 18 來了沒有可供顧客等待的椅子了,顧客 18 離開了顧客 19 來了沒有可供顧客等待的椅子了,顧客 19 離開了顧客5 離開了顧客9 正在理發顧客 20 來了顧客20 正在等待理發師顧客9 離開了顧客12 正在理發顧客12 離開了顧
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Taylor-Couette混凝實驗絮凝劑殘留鋁的影響因素研究
- 黑龍江省農業農村現代化水平評價及優化路徑研究
- miR-21-5p通過影響TAMs在肺癌進展中的作用及機制研究
- 我長大了-健康活動
- 腹瀉的護理要點
- 小孩子機器人教育培訓
- 工廠質量培訓課件
- 預防詐騙主題班會課件
- 預防地震知識培訓課件
- 火災預防知識培訓
- 酒店衛生管理自查報告和整改措施
- 安全教育培訓:實現安全文明施工
- 2025至2030分布式能源行業市場深度調研及發展規劃及有效策略與實施路徑評估報告
- 反邪教宣講課件
- 2025年全國統一高考英語Ⅰ卷(含答案)
- 1 感受生活中的法律 課件-道德與法治六年級上冊統編版
- 股份代持及員工持股計劃協議書范本
- 中醫集市活動方案
- 2025年江蘇省南京市中考歷史試卷(含解析)
- 腫瘤隨訪登記培訓
- 勞動仲裁內部培訓
評論
0/150
提交評論