2011-11-25 60 views
1

幾年前,我有一個操作系統研討會。我的任務是使用盡可能少的信號量爲流程同步創建算法。它應該是這個樣子的:嚴格的使用2個信號燈的N進程同步

P1 - > P2 - > P3 - > P4 - > P5

P(n)的 - 過程

只有一個進程同時運行,並嚴格的排序是需要

去年我使用了3個信號燈(有效地創建了一個屏障)來提供解決方案。 這裏是我的算法:

P S1 S1 S1 S1 
4W1 W0 W0 W0 W0 
4S0 P S2 S2 S2 
    3W2 W1 W1 W1 
    3S1 P S1 S1 
     2W1 W0 W0 
     2S0 P S2 
      W2 W1 
      S1 P 

(執行是從上到下,每個通道是一個單一的過程) P - 這需要做連載實際工作
W(N) - waitn
小號(N) - signaln
4W1的意思是 「做4個wait1s」
WAIT1和信號1與semaphore1工作等等......

說明算法:

  1. 每個進程車道開始
  2. 第一個進程運行,其他人會做信號1()
  3. 除了第一個所有其它進程將等待semaphore0(做WAIT0)
  4. 後過程1等待4 semaphores1它發送4個信號0,創建一個障礙,因爲其他進程等待第一個成功完成。

問題是我無法弄清楚如何使它使用2個信號量。

PS:這不是一項任務,這是一個長期處於我腦海的問題。

+1

作爲參考,如果五個進程*必須*以特定順序運行,並且其餘進程無法繼續直到前面的進程完成,則實際上有一個進程僞裝成五個進程。理想的解決方案包括*一個*過程和*零*信號量。 – cHao

+0

是的,實際上這是解決方案。爲什麼任何人都需要使用共享內存(信號量等)序列化N個同時啓動的進程,只需創建一個進程並執行已由程序代碼序列化的5個任務。但是在這裏,你沒有主流程,你不能僞裝它。 – Kveri

回答

0

它不能使用2個信號量來完成。 3最低。