java - 生产者/消费者中的信号量与互斥量
问题描述
在生产者-消费者问题中,为什么我们经常建议使用信号量而不是使用锁/互斥锁?
我看不出使用信号量的正当理由,因为我们只有2 个线程在协调。在这种情况下,锁似乎更容易编码和推理,因为一个线程将锁定缓冲区然后释放它,以便其他线程可以执行相同的操作。只有 2 个线程,所以我看不到信号的使用。
谁能说出为什么建议通常将信号量用于生产者-消费者?
解决方案
因为如果您只使用锁/互斥锁,您无法阻止消费者在释放锁/互斥锁后立即获取锁/互斥锁。例如,这可能会导致缓冲区为空但生产者暂时不使用锁/互斥锁的情况。
推荐阅读
- sql - 使用 CharIndex 函数在列的子字符串上选择 Distinct
- c# - 实体框架核心 2.1 将 AsNoTracking 与多个异步一起使用会给出 InvalidOperationException:连接未关闭
- c++ - 使用 glDrawArraysInstanced 渲染 OpenGL tilemap 的问题
- javascript - 在这种情况下我需要 redux-promise 吗?
- api - 我们如何让依赖慢的 API 更快?
- javascript - 将值分配给另一个具有动态分配键的对象内的对象
- java - 春季启动 + REST + HATEOAS + HAL
- kotlin - 防止 String.Contains 匹配空
- ms-access - 防止 MS Access 查询中的 MS Word 邮件合并锁定文件
- asynchronous - Jersey 异步客户端处理程序在服务器重新启动后永远不会超时