信號量機制是一種卓有成效的進程同步工具。
1.整形信號量
僅有兩個標準的院子操作wait(S)和signal(S)
wait(S){
while (S<=0);
S--;
}
signal(S){
S++;
}
2.記錄型信號量
typdef struct{
int value;
struct process_control_block *list;
}semaphore;
相應的wait(S)和Signal(S)可描述如下
wait(semaphore * S){
S->value--;
if(S->value<0)block(S->list);
}
signal(S){
S->value++;
if(S->value<=0)wakeup(S->list);
}
如果S->value的初值為1,則表示只允許一個進程訪問臨街資源,此時的信號量轉(zhuǎn)換為互斥信號量,用于進程互斥。
AND信號量
應用場景:當進程需要多個共享資源。
原理:將進程所需要的所有資源一次性的全部分配給進程,待進程使用完成之后再一起釋放。