1

我正在Linux中使用信号量。我想知道信号值是否可以增加到初始值以外?如果是这样,那么什么时候会发生?信号量值大于初始化值

例如,信号量的值被初始化为1 如果我递增两次连续使用最多(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

YES时会将其增加到2.结果是,接下来的两个信号量下调用将不阻塞地运行。信号量的一般用例是保护一组资源。如果有1个资源,则信号量的最大期望值将为1.如果有2个资源,则最大期望值为2,依此类推。因此,将信号量增加到2是否正确取决于上下文。如果在任何给定时间只有一个进程应该超过信号量,那么递增到2就是代码中的一个错误。如果允许2个或更多进程,则增加到2是允许的。

这是一个简单的解释。有关更多详细信息,请查看“计数信号灯”。你可能会想到的另一种类型的信号量是“二进制信号量”,它可以是0或者1.