【发布时间】:2015-01-05 04:38:11
【问题描述】:
在多生产者设置中,有一个生产者线程和一个消费者线程。消费者可以将新事件发布回同一个环形缓冲区吗?我假设它在缓冲区已满时中断,并且消费者线程在处理当前事件时永远不会获得空闲插槽。换句话说,死锁发生了。
最好的方法是什么?我是否必须引入一种代理线程来接收来自消费者的事件并将它们像普通生产者一样发布到环形缓冲区?
补充 - 为什么有用? 假设消费者线程正在处理股票市场数据事件,它需要向市场模拟器(一个类)发送订单,理想情况下,市场模拟器应该向同一个环形缓冲区发送订单执行事件。
【问题讨论】:
-
除了最简单的形式之外,就不能有多个生产者吗?如果是这样,消费者很可能是生产者,对吧?警告:我唯一接触过这种模式的是 Martin Fowler 的一篇文章。
-
生产者不能超过一个吗? -> 是 /*SPACE */ 如果是这样,消费者很可能是生产者,对吧? -> 不,不确定原因。想想如果一个线程在持有锁的情况下尝试获取锁会发生什么。