一、知識總覽

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

二、整型信號量

三、記錄型信號量

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......

八、總結

