圖書館可以容納1000人就讀,進入登記,離開登記。
答:1)編寫一個程序,每一個讀者就是一個進程,因此有多少讀者就有多少進程
2)設置信號量:
共有信號量R:用於登記表的互斥操作,初值為1
私有信號量S:用於讀者之間的同步操作,初值為1000
P-reader
P(s)
P(R)
在登記表上登記
V(R)
進入圖書館讀書
P(R)
撤銷登記信息
V(R)
V(S)
離開
用p、v操作解決司機與售票員的問題
司機進程:
while(true){
啟動車輛
正常駕駛
到站停車
}
售票員進程:
while(true){
關門
售票
開門
}
Run=0,stop=0(售票員優先)
P(run) 上乘客
啟動車輛 關車門
正常駕駛 v(run)
到站停車 售票
V(stop) p(stop)
開車門,下乘客
水果問題。
卓上有一個空盤子,盤子內只允許放一個水果,甲可向盤子內放蘋果,乙可向盤子內放橘子。丙專等吃盤子內的蘋果,丁專等吃盤子內的橘子,若盤子內已有水果,放者必須等待,若盤子內沒有自己要吃的水果,吃者必須等待。
1)請給出四個人之間的同步與互斥關系
2)用p v操作來協調四人的關系,並給出應設置的信號量及其初值。
1)由題意可知:甲、乙互斥使用盤子,甲、丙要同步,乙、丁要同步。
2)信號量的設置如下:
S表示盤子的容量,初值為1.S1為甲與丙的同步信號量,初值為0;s2為乙、丁的同步信號量,初值為0.同步算法如下:
獨木橋問題:一座獨木橋,河的兩筆愛你都有人要過橋,按照下面的規則過橋:向一方向的可連續過橋,某方向有人過橋時另一方向的人要等待。
為了保證過橋安全,請用PV操作分別實現正確的管理。
解:由於兩個方向的人不同時過橋,因此可定義一個信號量S(初值為1)以實現不同方向的人互斥過橋,但同一方向的人可連續過橋。顯然可以用計數器表示第一個過橋者和同方向的欲過橋者是否都以過橋,當然對兩個方向的過橋者分別用兩個不同的計數器rc1,rc2表示,初值為0.兩個計數器分別由兩個方向的過橋者共享,因此在訪問計數器時也應互斥,為此,引入兩個互斥信號量s1,s2,初值為1.