我面临着并行化一个简单的poll-process循环,如下所示:
while(!done)
buffer = poll(...)
foreach(item i in buffer)
process(i)
问题出在单个生产者/多个消费者模式之后,但生成的项目必须由 所有 消费者使用。
考虑到实现必须是多线程C ++代码,我应该使用什么样的数据结构?
感谢您的建议!
答案 0 :(得分:1)
如果您事先了解消费者数量,则每个消费者可以拥有一个队列。
如果动态添加和删除使用者,则必须决定如何处理在创建使用者之前生成的消息。如果所有消费者都必须处理所有消息 - 使用向量来保留所有消息,并让每个消费者只保留服务器中最后处理消息的索引。
不要忘记同步对矢量的访问,因为当生产者添加项目时可以重新分配
答案 1 :(得分:0)
我想最好的选择是为每个消费者创建一个消息队列。
这意味着所有消费者都必须向生产者注册,然后,生产者应该将消息排队到每个消息队列。
一个好的实现选项应该是在生产者和消费者之间创建一个代理对象,代理对象是一个混合对象,这意味着它消耗来自生产者的所有消息,但也将它们转发给所有注册的消费者。