有两个主题 A (制作人)和 B (消费者)。
A 生成的数据仅用块读取,因此 B 只允许读取一次 A 已经产生了一大块。 单个数据是一个简单的结构,块长度是可变的。例如,一旦可能是在生成50个数据后允许读取 B ,则另一个时间可能是200个。
我发现了我想要使用的生产者/消费者队列的这种实现: https://github.com/cameron314/readerwriterqueue
我目前的想法是 A 将其数据写入std :: vector,然后将std :: vector传递到队列中。但我怀疑这是否有效,因为队列不知道std :: vector将占用多少内存,并且它想要事先分配内存。
我希望有人知道更简单的解决方案。
答案 0 :(得分:2)
无论您生产或消费什么,您都需要一个并发队列来进行生产者和消费者之间的沟通。如果我们这样做C ++风格,你最终会得到类似的东西:
template<typename T, typename Alloc>
class concurrent_queue;
(请注意,有些图书馆已经为您提供了此类容器,例如英特尔TBB。)
模板参数T
是您在生产者和消费者之间交换的内容。当你要求消费块时,请T = your_chunk_type
。假设您的块大小可变:Chunk = std::vector<something>
。使用你在github上链接的lib,你可以使用ReaderWriterQueue<Chunk>
作为共享工作的队列。
答案 1 :(得分:0)
您可以使用标准大小的数据块并拥有一个或多个框架块,这些块可以指示消息的开始和结束,也可以只是一个也具有长度的开始块。邮件存储在其中。