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()
- 除了第一個所有其它進程將等待semaphore0(做WAIT0)
- 後過程1等待4 semaphores1它發送4個信號0,創建一個障礙,因爲其他進程等待第一個成功完成。
問題是我無法弄清楚如何使它使用2個信號量。
PS:這不是一項任務,這是一個長期處於我腦海的問題。
作爲參考,如果五個進程*必須*以特定順序運行,並且其餘進程無法繼續直到前面的進程完成,則實際上有一個進程僞裝成五個進程。理想的解決方案包括*一個*過程和*零*信號量。 – cHao
是的,實際上這是解決方案。爲什麼任何人都需要使用共享內存(信號量等)序列化N個同時啓動的進程,只需創建一個進程並執行已由程序代碼序列化的5個任務。但是在這裏,你沒有主流程,你不能僞裝它。 – Kveri