前言
閱覽室問題 / 圖書館問題是操作系統中P、V操作部分非常經典的問題!_
閱覽室問題 / 圖書館問題
1. 問題描述
有一閱覽室,讀者進入時必須先在一張登記表上進行登記,該表為每一座位列一表目,包括座號和讀者姓名。讀者離開時要消掉登記信號,閱覽室中共有100個座位。用PV操作控制這個過程。
2.問題分析
由於每個讀者都會進行一樣的操作:登記->進入->閱讀->撤銷登記->離開,所以建立一個讀者模型即可。
臨界資源有:座位,登記表。讀者間有座位和登記表的互斥關系,所以設信號量empty表示空座位的數量,初始為100,mutex表示對登記表的互斥訪問,初始為1。
3. P、V操作
Semaphore mutex = 1, empty = 100;
Reader():
While(true) {
P(empty) //申請空座位
P(mutex) //申請登記表
//登記
V(mutex) //釋放登記表
//進入閱讀
P(mutex) //申請登記表
//撤銷登記
V(mutex) //釋放登記表
V(empty) //釋放座位
}