📜  门| GATE CS 2018 |简体中文第41章

📅  最后修改于: 2021-06-28 18:28:17             🧑  作者: Mango

考虑以下生产者-消费者同步问题的解决方案。共享缓冲区的大小为N。定义了三个信号量为空,完整互斥的初始值分别为0,N和1。信号量为表示缓冲区中可供用户读取的可用插槽数。信号量已满表示生产者要写入的缓冲区中的可用插槽数。以下代码中的占位符变量(用P,Q,R和S表示)可以分配为emptyfull 。有效的信号量操作为: wait()sigmal()

8

对P,Q,R和S进行以下哪一项赋值将得出正确的解决方案?

(A) P:,Q:,R:,S:
(B) P:,Q:,R:,S:
(C) P:已满,Q:,R:,S:已满
(D) P:,Q:,R:,S:答案: (C)
说明:鉴于,
空= 0
满= N
互斥体= 1

由于信号量的值为0,所以您不能等待信号量的第一次尝试。

注–信号量表示已填充的插槽数,因此生产者进程必须处理信号量和互斥量信号量。完整的信号量表示空插槽的数量,因此使用者进程必须处理完整和互斥的信号量。

选项(A)导致饥饿。
选项(B)导致饥饿。
选项(D)由于已填充的插槽数最初为信号量表示为0,因此无法使用消费者进程。因此,这种暗示是错误的。

只有P:,Q:,R:,S:才是正确的顺序,以确保无死锁和无饥饿的实现。

选项(C)是正确的。
这个问题的测验