作業系統綜合題之“用記錄型訊號量機制的wait操作和signal操作寫出三個程序的同步程式碼(水果進框問題-程式碼補充)”

骚哥發表於2024-03-22

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

相關文章