1 需求分析
收銀員與顧客問題類似於經典的生產者和消費者問題,屬於經典的程序同步問題。需要實現以下問題:
在某超市有m個收銀員,且同時最多允許有n個顧客購物
當顧客數少於收銀員數時,顧客可以立即進行付款;當顧客數多於收銀員數時,顧客必須排隊等待付款
經過分析可知,需要將收銀員和顧客看成兩個程序,利用pv操作正確地協調這兩類程序之間的工作。
2 概要設計
2.1 構築收銀員與顧客的佇列
構造兩個佇列用來分別存放收銀員與顧客的p、v 資訊。
typedef struct lnode
typedef struct a
2.2 判定顧客處於哪個操作
void enque(linklist &l,char name) 函式對顧客進行插入操作,從等待狀態到付款(付款到付款完畢)。
char deque(linklist &l)函式對顧客進行刪除操作,當顧客由等待到付款時,就從等待佇列裡將顧客刪除,當顧客從付款到等待時,就從付款佇列裡將顧客刪除。
2.3 對顧客進行 pv 操作
p 操作:對訊號量 xin_guke進行減 1 操作,判斷結果是否大於等於0,如果大於等於0,則進入付款佇列,反之繼續等待。
2.4 控制流程
用 void enque(linklist &l, char name)和char deque(linklist &l) 這兩個函式對顧客進行佇列的插入和刪除
用 void sy()函式建立收銀員相應的操作
用 void gk()函式建立顧客相應的操作
void p()用來控制顧客的p操作
void v()用來控制顧客的v操作
那麼,p、v操作具體流程請看下圖1和下圖2。
程式設計師下班去超市購物與收銀員的一段搞笑對白
上個週末,在一超市買完東西結帳,那個長得還不錯的mm售貨員,遞給我一堆散錢和一顆糖,我就知道她沒零錢就以糖代替,我因為無聊就和她答訕。我拿著糖甩了甩 這是你請我吃的嗎?mm 不是,是沒零錢找你了,以糖代替 我 真失望,那我要錢不要糖 mm 沒散錢,不好意思 我 我又不吃糖 mm 拿回去給你小朋友吃啊...
作業系統 作業系統的設計與實現
系統設計的首要問題是定義目標和規範。從高層來說,系統設計取決於所選硬體和系統型別 批處理 分時 單使用者 多使用者 分布式 實時或通用。除了最高設計層外,需求可能很難說清,但需求可以分為兩類 使用者目標和系統目標。使用者要求系統具有一定的優良效能 系統應該易於學習和使用 可靠 安全和快速。研發人員為...
作業系統 同步與互斥問題
1.生產者 消費者問題 define n 100 有界緩衝區大小 typedef int semaphore 定義訊號量 semaphore mutex 1 臨界區互斥訊號量 semaphore empty n 空閒緩衝區 semaphore full 0 緩衝區初始化為空 void produce...