📜  算法测验|须藤放置[1.6] |问题9

📅  最后修改于: 2021-06-29 18:00:01             🧑  作者: Mango

考虑以下使用信号量的生产者-消费者问题的过程,并选择正确的语句:

semaphore n = 0;
semaphore s = 1;
  
// Producer Function
void producer(){
    while(true){
        produce();
        semWait(s);
        addToBuffer();
        semSignal(s);
        semSignal(n);
    }
}
// Consumer function
void consumer(){
    while(true){
        semWait(s);
        semWait(n);
        removeFromBuffer();
        semSignal(s);
        consume();
    }
}

(A)生产者将能够将一个项目添加到缓冲区中,但是消费者永远不能消费它。
(B)消费者将从缓冲区中删除不超过一项。
(C)如果使用者在缓冲区为空时成功获取信号量s,则会发生死锁。
(D)对于无死锁操作,信号量n的起始值必须为1,而不是0。答案: (C)
说明:最初,缓冲区中没有元素。信号量s = 1和信号量n = 0。我们假设缓冲区为空时,最初的控制权交给了使用者。 semWait减小信号量’的值。现在,s = 0且semWait(n)减小了信号量’n’的值。由于信号量’n’的值小于0,因此控件陷入了函数semWait()的while循环中,并出现了死锁。因此,如果使用者在缓冲区为空时成功获取信号量s,则会发生死锁。
这个问题的测验
如果您在以上帖子中发现任何错误,请在下面发表评论