2.13信號量機制實現進程互斥,同步,前驅關係

一,進程互斥

1,分析問題,設置臨界區

2,設置互斥信號量S.value(臨界資源),初值爲1

3,進入臨界區之前對信號量執行P操作(S.value--),互斥信號量值爲0,表示資源被佔用,切換到其它進程時,就不能繼續執行而主動堵塞

4,離開臨界區之後對信號量執行V操作(S.value++),互斥信號量值爲1,此時其它進程就可以佔用此資源,如果有進程正在堵塞中,就將堵塞隊列中隊頭進程喚醒

 

二,進程同步

1,分析問題,找出哪裏需要事件“一前一後”的同步關係,假設A進程在B進程之前執行

2,設置同步信號量(用來喚醒後面的B進程),初值爲0

3,在A進程執行後,執行V操作(S.value++)這時value=1,告訴進程B,A進程已經完成了,你可以執行了,如果在進程A沒有執行之前B進程先執行了,此時value=0,B進程知道A進程沒有執行就主動進入堵塞狀態。

4,在通過了對value值爲1的檢查後,B進程就可以訪問臨界區了,在B訪問臨界區之前需要執行P操作(S.value--)將value變爲0,告訴其它進程該資源被佔用,其它進程不能訪問該臨界資源

 

三,進程的前驅關係

1,分析問題,畫出前驅圖,把每一對前驅關係都看成一個同步問題

2,爲每一個前驅關係設置不同的同步信號量,初值爲0

3,在每個前進程執行之後,執行V操作,把同步信號量變爲1,喚醒下一個進程

4,在每個後進程執行之後,執行P操作,把同步信號量變爲0,不讓其它進程訪問該資源

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章