我正在研究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? */
}
答案 0 :(得分:2)
是的,它会将其增加到2.结果是接下来的两个信号量向下调用将无阻塞地运行。信号量的一般用例是保护资源池。如果有1个资源,那么信号量的最大期望值将为1.如果有2个资源,则最大期望值为2,依此类推。因此,将信号量增加到2是否正确取决于上下文。如果在任何给定时间只有1个进程应该通过信号量,那么增加到2就是代码中的错误。如果允许2个或更多进程,则允许递增到2。
这是一个简化的解释。有关详细信息,请查看“计算信号量”。你可能会想到的另一种信号量是“二进制信号量”,它是0或1。