我在这里使用并发队列:
https://github.com/cameron314/readerwriterqueue
基本上有一个制作人,它为多个消费者制作数据。 每个消费者都应该拥有自己的队列,每个消费者都有一个唯一的标识符。
理想情况下,我想将队列添加到std :: map并将唯一标识符映射到队列。
不幸的是,这并不起作用,因为队列实现没有复制构造函数,因此拒绝将其添加到地图中。
如何将唯一ID映射到队列?
答案 0 :(得分:3)
潜在的问题是队列不允许复制或移动在这种情况下,解决方案是使用std::unique_ptr
,这可以为您提供一个非常安全的解决方案来创建这些对象。堆。关键是这种类型只能移动而不能复制。
根据您的说明,我认为您想创建std::map<unsigned int, std::unique_ptr<ReaderWriterQueue<T>>>
。
class SomeClass
{
public:
void setUpQueue(unsigned int new_id)
{
std::unique_ptr<ReaderWriterQueue<T>> ptr(new ReaderWriterQueue<T>(...));
// Have to use move here, othrewise, it would attempt to make a copy
queue_map.emplace(new_id, std::move(ptr));
// could also do
// queue_map.insert({new_id, std::move(ptr)}; or
// queue_map.insert(std::make_pair(new_id, std::move(ptr));
}
std::map<unsigned int, std::unique_ptr<ReaderWriterQueue<T>>> queue_map;
}