【问题标题】:A counting semaphore has value -x. How many number of waiting processes are there?计数信号量的值为 -x。有多少个等待进程?
【发布时间】:2017-03-01 08:59:02
【问题描述】:

我的书上的答案是 x。

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

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

while(s <= 0);

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

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

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

【问题讨论】:

    标签: operating-system ipc semaphore


    【解决方案1】:

    计数信号量实现如下:

        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() 方法唤醒,形成绝对值等于尝试访问它失败的进程数。

    【讨论】:

    • 这就是我想要的。谢谢。 :)
    猜你喜欢
    • 2012-02-03
    • 2017-12-21
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多