boost中的线程安全可复制循环缓冲区

时间:2013-12-12 12:18:51

标签: c++ multithreading boost

我正在使用boost 1.53,我希望在我的应用程序中有一个循环缓冲区的线程安全实现。请看下面的应用程序概念:

我有N个套接字从我读取数据并将其放到相应的循环缓冲区。关键是我不知道要打开的套接字的确切数量(它们甚至可以动态打开) 在我看来,一个明显的解决方案是在我的班级之间和班级内部都有一张地图。但由于互斥体不是可复制的对象,因此无法实现。

我的任务的最佳解决方案是什么?任何想法,将不胜感激。 期待您的回复。

提前Tnx, 梅德

1 个答案:

答案 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;
    }
    // [...]
};