【发布时间】:2018-09-01 05:47:31
【问题描述】:
在生产者-消费者问题中,为什么我们经常建议使用信号量而不是使用锁/互斥锁?
我没有看到使用信号量的正当理由,因为我们只有 2 个线程 进行协调。在这种情况下,锁似乎更容易编码和推理,因为一个线程将锁定缓冲区然后释放它,以便其他线程可以做同样的事情。只有 2 个线程,所以我看不到信号的使用。
谁能说出为什么建议通常将信号量用于生产者-消费者?
【问题讨论】:
-
许多场景涉及多个生产者和/或消费者,在这种情况下,信号量更有意义。
-
"谁能说一下为什么建议使用信号量通常用于生产者-消费者?" - 我们只能猜测为什么有人更喜欢信号量或互斥锁来解决一些生产者/消费者问题。偏好信号量可能是历史原因。这可能是简单原因,因为单独的互斥锁不允许等待空/满队列。 (为此等待,您需要条件变量,但它们对于初学者来说相当复杂)。此外,生产者/消费者不是一个单一的问题——它是一类问题。这个类的不同问题使用不同的方法以不同的方式解决。
-
看来这个问题是一个普遍的问题,而不是一个特定于 Java 的问题。你介意删除“java”标签吗?
标签: java concurrency locking mutex semaphore