计数信号量的值为 -x。有多少个等待进程?

A counting semaphore has value -x. How many number of waiting processes are there?

我的书上写的答案是 x。

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

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

while(s <= 0);

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

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

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

计数信号量实现如下:

    struct semaphore{
           int value;
           Queue L;
           }


这里变量 "value" 可以取 positive , negative 或 '0' 作为值,这取决于它的初始值和尝试访问它的进程数。 变量的初始值 "value" 告诉可以同时访问它的进程数。

wait() 方法实现为:

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

因此,当进程尝试访问信号量时,如果该值小于“0”,它将进入休眠状态,因为没有更多权限可以访问该资源。
因此,进程尝试访问信号量的次数,它的值将被递减,一旦值变为负数,进程将在等待队列中等待,直到被 signal() 方法唤醒,使绝对值等于尝试访问它但未成功的进程数。