2013-12-12 2 views
0

Я использую boost 1.53, и я бы хотел, чтобы потоковое безопасное выполнение циклического буфера внутри моего приложения. Пожалуйста, ознакомьтесь с концепцией приложения ниже:Резервный скопируемый круговой буфер в boost

У меня есть N сокетов, откуда я прочитал данные и поместил их в соответствующий круговой буфер. Дело в том, что я не знаю точное количество сокетов, которые нужно открыть (их можно было открыть даже динамически) Одно явное решение, появившееся на мой взгляд, - это карта между моим классом и внутри него. Но достичь этого невозможно, поскольку мьютекс не является объектом для копирования.

Какое оптимальное решение для моей задачи? Любые идеи были бы хорошы. Ждем ваших ответов.

TNX заранее, Дмитрий

ответ

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; 
    } 
    // [...] 
}; 
+0

Так что, если я беру ограниченное внедрение буфера отсюда http://www.boost.org/doc/libs/1_49_0/libs/circular_buffer/doc/circular_buffer.html#boundedbuffer и реализовать конструктор копирования таким образом, вы опубликовали, это будет хорошо? – Dmitry

+0

Ну, вы все равно обмениваете доступ к буфере соответственно, чтобы вы всегда правильно блокировали доступ к базовому буфере для чтения или записи. Но если вы сделаете это правильно, вы можете просто использовать круговой буфер от Boost. – ComicSansMS

+0

Основная проблема для меня - в том, что я не могу использовать ограниченный буфер, поскольку он из-за его некомпетентности. Конечно, я могу реализовать эти методы, но разве это не сломается? Есть ли у них какие-либо побочные эффекты? – Dmitry

Смежные вопросы