信号量(一)

2016-08-24  本文已影响57人  Baby小猪

信号量机制是一种卓有成效的进程同步工具。

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信号量

应用场景:当进程需要多个共享资源。
原理:将进程所需要的所有资源一次性的全部分配给进程,待进程使用完成之后再一起释放。

上一篇下一篇

猜你喜欢

热点阅读