一,進程互斥
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,不讓其它進程訪問該資源