我正在使用boost 1.53,我希望在我的应用程序中有一个循环缓冲区的线程安全实现。请看下面的应用程序概念:
我有N个套接字从我读取数据并将其放到相应的循环缓冲区。关键是我不知道要打开的套接字的确切数量(它们甚至可以动态打开) 在我看来,一个明显的解决方案是在我的班级之间和班级内部都有一张地图。但由于互斥体不是可复制的对象,因此无法实现。
我的任务的最佳解决方案是什么?任何想法,将不胜感激。 期待您的回复。
提前Tnx, 梅德答案 0 :(得分:1)
但由于互斥体不是可复制对象,因此无法实现。
这不是问题,因为您不希望副本的互斥锁与原始互斥锁有任何关系。
您可以像处理普通地图一样复制数据,然后默认为副本构建新互斥锁。
class MyBuffer
{
std::map<key_T, value_T> m_data;
mutable std::mutex m_mutex;
public:
MyBuffer(MyBuffer const& other)
{
std::lock_guard<std::mutex> lk(other.m_mutex);
m_data = other.m_data;
}
// [...]
};