信号量机制是一种卓有成效的进程同步工具。
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,则表示只允许一个进程访问临街资源,此时的信号量转换为互斥信号量,用于进程互斥。
AND信号量
应用场景:当进程需要多个共享资源。
原理:将进程所需要的所有资源一次性的全部分配给进程,待进程使用完成之后再一起释放。