【问题标题】:Semaphore value greater than initialized value信号量值大于初始化值
【发布时间】:2015-04-02 02:11:52
【问题描述】:

我正在研究 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? */

}

【问题讨论】:

    标签: linux multithreading linux-kernel linux-device-driver semaphore


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多