1.問題:假設一個水果賽選系統由三個程序A、B、C組成。程序A每次取一個水果,之後存放在貨架F上,F的容量為每次只能存放一個水果。若貨架上存放的是蘋果則讓程序B取出,並存放到蘋果箱中;若貨架上存放的是菠蘿則讓程序C取出後,將其存放到菠蘿框中
(1)列出所需的訊號量並初始化
(2)請用記錄型訊號量機制的wait操作和signal操作寫出三個程序的同步程式碼
2.答案
答:
(1)var e,e1,e2:semaphore;
e.value = 1;
e1.value = 0 ;
e2.value = 0;
(2)
A:
Begin
Repeat
wait(e);
去一個水果,存放在貨架F上;
signal(e1) or signal(e2);
Until false;
End
--------------------------------------------------------
B:
Begin
Repeat
wait(e1);
從貨架上取出蘋果,並存放到蘋果箱中;
signal(e);
Until false;
End
---------------------------------------------------------
C:
Begin
Repeat
wait(e2);
從貨架上取出菠蘿,並存放到菠蘿箱中;
signal(e);
Unitl false;
End