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

Operating system 计数信号量的值为-x。有多少个等待进程?,operating-system,ipc,semaphore,Operating System,Ipc,Semaphore,我的书上说的答案是x 但这怎么可能呢? 我刚刚从中了解到,计数信号量具有正值,因此多个进程可以访问关键部分。那么,在这种情况下,我们怎么能说x进程正在等待,因为当到达0时,下一个等待信号将忙于等待一个进程,并且信号量值永远不能小于0 现在,我认为还有第二种情况。与计数信号量一样,计数信号量初始化为1。现在,当一个进程访问它时,它变为0。下一步,如果我们写信 while(s <= 0); while(s计数信号量实现如下: struct semaphore{

我的书上说的答案是x

但这怎么可能呢? 我刚刚从中了解到,计数信号量具有正值,因此多个进程可以访问关键部分。那么,在这种情况下,我们怎么能说x进程正在等待,因为当到达0时,下一个等待信号将忙于等待一个进程,并且信号量值永远不能小于0

现在,我认为还有第二种情况。与计数信号量一样,计数信号量初始化为1。现在,当一个进程访问它时,它变为0。下一步,如果我们写信

while(s <= 0);

while(s计数信号量实现如下:

    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();
               }
wait(信号量s){
s、 价值--;
如果(s.值<0){
将进程放入队列s.L;
睡眠();
}
因此,当进程尝试访问信号量时,如果该值小于“0”,它将进入睡眠状态,因为不再有访问资源的权限。

因此,进程尝试访问信号量的次数,其值将减少很多倍,一旦值变为负值,进程将在等待队列中等待,直到被信号()唤醒方法,使绝对值等于尝试访问它失败的进程数。

计数信号量的实现如下:

    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();
               }
wait(信号量s){
s、 价值--;
如果(s.值<0){
将进程放入队列s.L;
睡眠();
}
因此,当进程尝试访问信号量时,如果该值小于“0”,它将进入睡眠状态,因为不再有访问资源的权限。

因此,进程尝试访问信号量的次数,其值将减少很多倍,一旦值变为负值,进程将在等待队列中等待,直到被信号()唤醒方法,使绝对值等于尝试访问它失败的进程数。

这就是我要找的。谢谢。:)这就是我要找的。谢谢。:)