我正在Linux中研究信号量。我想知道信号量值是否可以在初始化值之外递增?如果是的话,什么时候能发生?
例如,信号量值初始化为1。
如果我连续增加两次使用up(sem),则信号量的值将增加超过1。

x(void){
sema_init(sem1, 1);
down(sem1);
{
    .
    . // some code implementation
    .
}
up(sem1); // i understand this increment the value back to 1.
up(sem1);
/* what exactly does this statement do to the semaphore?
Will it increment the value to 2? If so what is the meaning of this statement? */

}

最佳答案

是的,它会增加到2。其结果是,接下来的两个信号量下降调用将在没有阻塞的情况下运行。信号量的一般用例是保护资源池。如果有1个资源,则信号量的最大预期值将为1。如果有2个资源,则最大期望值为2,依此类推。因此,将信号量增加到2是否正确取决于上下文。如果在任何给定的时间只有一个进程应该通过信号量,那么递增到2是代码中的一个错误。如果允许2个或更多进程,则允许递增为2。
这是一个简单的解释。有关更多详细信息,请参阅“计数信号量”。您可能会想到的另一种信号量类型是“二进制信号量”,即0或1。

10-07 16:26
查看更多