📜  门| GATE CS 2018 |第 41 题

📅  最后修改于: 2021-09-24 05:26:33             🧑  作者: Mango

考虑以下生产者-消费者同步问题的解决方案。共享缓冲区大小为 N。三个信号量empty、fullmutex定义为各自的初始值 0、N 和 1。Semaphore empty表示缓冲区中可用插槽的数量,供消费者读取。信号量已满表示缓冲区中可用插槽的数量,供生产者写入。下面代码中由 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,因此您不能在第一次尝试时等待空信号量。

注意 –信号量表示填充槽的数量,因此生产者进程必须处理和互斥信号量。 full semaphore 表示空槽的数量,因此消费者进程必须处理full和 mutex 信号量。

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

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

选项(C)是正确的。

观看 GeeksforGeeks 视频说明:

这个问题的测验