在作業系統中,程序的同步和互斥是我們程序管理的重點和難點。不僅是本科學習階段的重點,同時在歷年研究生入學考試(408和自主命題)中,用pv操作來實現程序同步和互斥,也經常是一道大題。今天跟大家帶來的是一道常規的pv操作-銀行存款問題,其實這道題和理髮師的思路非常相似。本篇文章跟大家提供兩種解題思路。下面請看問題描述:
某銀行提供1個服務視窗和10個供客戶等待的座位,客戶到達銀行時,若有空座位,則到取號機上領取乙個號,等待叫號。取號機每次僅允許一位客戶使用,當營業員空閒時,通過叫號選取一位客戶,並為其服務。
這裡可以利用典型的生產者消費者模型,同時增加乙個互斥訊號量,表示對取號機的互斥使用,在增加乙個同步量,表示客戶與職員的同步關係。
semaphore empty=
10//空椅子數量
semaphore full=
0//人數
semaphore mutex=
1//互斥訊號量,取號機的互斥使用
semaphore service=
0//互斥訊號量,取號機的互斥使用
process 客戶:
while(1
)
process 職員:
while(1
)
請大家思考這樣乙個問題,如果乙個客戶到來,發現已經沒有座位了,可是他還有急事,那麼他可以離開嗎?按照上面的解決方案,很明顯,他需要等著。我們重新修改一下我們的問題——當客戶到來,發現沒有空座位,則立即離開。
那麼我們的解決方案如下:
int chairs=
10//空椅子數量
int count=
0//人數
semaphore mutexpeople=
1//互斥訊號量,人數互斥
semaphore customer=
0//人數
semaphore mutex=
1//互斥訊號量,取號機的互斥使用
semaphore service=
0//服務
process 客戶:
while(1
)
process 職員:
while(1
)
如果,銀行考慮到視窗僅有乙個,想提高顧客滿意度,增加到三個服務視窗。只需要調整一下訊號量,將service改為-3,下面僅給出訊號量定義:
int chairs=
10//空椅子數量
int count=
0//人數
semaphore mutexpeople=
1//互斥訊號量,人數互斥
semaphore customer=
0//人數
semaphore mutex=
1//互斥訊號量,取號機的互斥使用
semaphore service=-3
//服務
對於銀行存款問題,其實是乙個理髮師問題的變種。 作業系統PV操作題整理1
1 餐廳分為等待區 用餐區 廚房。等待區中有n個椅子,顧客來了有位置則坐下,沒有就離開。廚房互斥使用,進入廚房後椅子後椅子空出來供顧客坐下。用餐處有m個位置,用完廚房看用餐處是否有空位,如果有空位則顧客從廚房出來並叫清潔員a清掃,沒有則坐在廚房等待。顧客到用餐處用餐後,通知清潔員b進行打掃。incl...
作業系統 PV操作
1.pv原語的含義 p操作和v操作是不可中斷的程式段,稱為原語。pv原語及訊號量的概念都是由荷蘭科學家e.w.dijkstra提出的,其基本思路是用一種新的變數型別 semaphore 來記錄當前可用資源的數量。訊號量sem是一整數,sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零...
作業系統 PV操作
分析 進入書店p sn 與離開書店v sn 操作對應題目中的 該書店最多允許n個購書者進入 因為假如進入書店的人數超過了最大的限制,p操作會被阻塞,知道v操作執行後釋放空間。接下來分析購書與收費的流程,現實生活中購書付款是顧客提出繳費的要求後,收銀員才能進行收費。所以收銀員預設是處於待機狀態即阻塞狀...