作業系統的收銀員與顧客問題

2021-09-25 09:33:34 字數 924 閱讀 1549

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...