操作系統——信號量機制及其實現進程互斥、同步、前驅關系


一、知識總覽

 

 信號量機制的基本原理:兩個或多個進程可以利用彼此間收發的簡單的信號來實現“正確的”並發執行,一個進程在收到一個指定信號前,會被迫在一個確定的或者需要的地方停下來,從而保持同步或互斥。

二、整型信號量

 

三、記錄型信號量

 

typedef struct{
    int value;
    struct process *L;
}semaphore//信號量

void wait(semaphore S){//wait原語
    S.value--;
    if(S.value<0){
        block(S.L);//阻塞原語
    }
}

void signal(semaphore S){//signal原語
    S.value++;
    if(S.value<=0){
        wakeup(S.L);//喚醒原語
    }
}

 

 

 

四、信號量機制總結:

 

 

五、信號量機制實現進程互斥

互斥信號量的初值實際上是表示某種資源的數量,而我們這里臨界區同一時間段內只允許一個進程來訪問,所以可以把臨界區理解成一種特殊的資源,該資源只有一個,只能被分配給一個進程使用,只有這個進程釋放了,才能被其他進程使用。如果一個進程需要使用臨界區這種特殊的資源的時候,那么使用之前就應該對其所對應的信號量進行P操作,使用之后進行V操作。

對不同的臨界資源需要設置不同的互斥信號量。

 

六、信號量機制實現進程同步

 

 

設置同步信號量S,初始化為0

在“前操作”之后執行V(S)

在“后操作”之前執行P(S)

七、信號量機制實現前驅關系

前驅關系:只有S1執行了之后才能執行S2,只有S2執行了之后才能執行S4和S5......

 八、總結

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM