0

在多生产者设置中,有一个生产者线程和一个消费者线程。消费者可以将新事件发布回同一个环形缓冲区吗?我假设它在缓冲区已满时中断,并且消费者线程在处理当前事件时永远不会获得空闲插槽。换句话说,死锁发生了。

做这个的最好方式是什么?我是否必须引入一种代理线程,它从消费者那里接收事件并将它们像普通生产者一样发布到环形缓冲区?

补充 - 为什么有用? 假设消费者线程正在处理股票市场数据事件,它需要向市场模拟器(一个类)发送订单,理想情况下,市场模拟器应该将订单执行事件发送到同一个环形缓冲区。

4

2 回答 2

1

根据所讨论的其他细节提供单独的答案(我仍然相信我的原始答案是有效的)。

在我的头脑/经验中,你试图一次性做很多事情,因为你将环形缓冲区的消费者和发布者混为一谈,这通常是独立的关注点。我通常希望您的模拟器的响应事件以与处理原始事件相同的方式传递到环形缓冲区。

话虽如此,您所要求的实际上是可能的。

但是,您必须自己做更多的工作并编写一个自定义EventProcessor,它允许您在尝试发布事件之前将传入的消息标记为已处理(从而释放插槽)。

于 2015-01-07T22:22:50.387 回答
0

如果您使用Single producer设置,那么消费者不能回发到环形缓冲区,因为它不是Single producer.

退后一步,为什么只有一个消费者需要写入环形缓冲区?它已经知道它做了什么,没有其他东西会从缓冲区中读取。

如果您有多个消费者,您可以写回缓冲区,但要确保额外的消费者受控于正在写回缓冲区而不是生产者序列的消费者。

于 2015-01-05T20:54:39.337 回答