有两个线程A(生产者)和B(消费者)。
A 产生的数据只能以 block 的形式读取,因此B 只允许读取一次A 产生了一整 block 。 单条数据是一个简单的结构, block 长度是可变的。比如一次可能是B在产生50条数据后允许读取,另一次可能是200条。
我找到了我想使用的生产者/消费者队列的这个实现: https://github.com/cameron314/readerwriterqueue
我目前的想法是,A 将其数据写入 std::vector,然后将 std::vector 传递到队列中。但我怀疑这是否可行,因为队列不知道 std::vector 将占用多少内存,并且它想预先分配内存。
我希望任何人都知道一个更简单的解决方案。
最佳答案
无论您生产或消费什么,您都需要一个并发队列来在生产者和消费者之间进行通信。如果我们用 C++ 风格来做,你最终会得到类似这样的东西:
template<typename T, typename Alloc>
class concurrent_queue;
(请注意,某些库已经为您提供了此类容器,例如 Intel TBB)。
模板参数T
是你在生产者和消费者之间交换的东西。当你要求消费 block 时,这里 T = your_chunk_type
.假设您的 block 大小可变:Chunk = std::vector<something>
.使用您在 github 上链接的库,您可以使用 ReaderWriterQueue<Chunk>
作为共享工作的队列。
关于C++ - 生产者/消费者只允许消费定义的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35064543/