首页 文章

计数信号量具有值-x . 有多少等待进程?

提问于
浏览
0

我的书中的答案是x .

但那怎么可能呢?我刚从Differnce between Counting and Binary Semaphores了解到计数信号量具有正值,因此多个进程可以访问临界区 . 因此,在这种情况下 - 如何说x进程正在等待,因为在达到0时,下一个等待信号将忙于等待进程,并且信号量值永远不会小于0 .

现在,我认为可能是第二种情况 . 就像计数信号量被初始化为1.现在,当一个进程访问它时,它变为0.接下来在等待中,如果我们写,

while(s <= 0);

然后下一个进程将使其为-1 . 因此,单个进程等待使信号量值为-1 .

因此我可以得出结论,对于-x,x进程正忙着等待!

有人可以澄清我是对还是错?任何帮助表示赞赏 . 提前致谢 .

1 回答

  • 4

    计数信号量实现如下:

    struct semaphore{
               int value;
               Queue L;
               }
    

    这里变量"value"可以取正值,负值或'0'作为值,具体取决于其初始值和尝试访问它的进程数 . 变量"value"的初始值表示可以同时访问它的进程数 .

    wait()方法实现为:

    wait(semaphore s){
               s.value--;
               if(s.value < 0){
                   put the process in the queue s.L;
                   sleep();
                   }
    

    因此,当进程尝试访问信号量并且该值变得小于'0'时,它将进入休眠状态,因为没有更多权限来访问该资源 .
    因此,进程尝试访问信号量的次数,其值将减少很多次,一旦值变为负数,进程将在等待队列中等待,直到被signal()方法唤醒,产生绝对值等于尝试访问它的进程数失败 .

相关问题