Является ли это приемлемым способом блокировки контейнера с помощью С++?

Мне нужно реализовать (на C++ )потокобезопасный контейнер таким образом, чтобы только один поток мог добавлять или удалять элементы из контейнера. Я делал такие вещи раньше, разделяя мьютекс между потоками. Это приводит к тому, что в моем коде засоряется множество объектов мьютекса, что делает вещи очень беспорядочными и сложными в обслуживании.

Мне было интересно, есть ли более аккуратный и более объектно-ориентированный способ сделать это. Я подумал о следующей простой оболочке класса вокруг контейнера (semi -псевдокода C++)

 class LockedList {
    private:
        std::list<MyClass> m_List;

    public:
        MutexObject Mutex;
 };

чтобы блокировку можно было сделать следующим образом

 LockedList lockableList;     //create instance
 lockableList.Mutex.Lock();    // Lock object

... // search and add or remove items

 lockableList.Mutex.Unlock();   // Unlock object

Итак, мой вопрос действительно состоит в том, чтобы спросить, является ли это хорошим подходом с точки зрения дизайна? Я знаю, что разрешение публичного доступа к членам не одобряется с точки зрения дизайна, есть ли в приведенном выше дизайне какие-либо серьезные недостатки. Если да, то есть ли лучший способ реализовать потокобезопасные объекты-контейнеры?

Я прочитал много книг по дизайну и C++ в целом, но мне кажется, что действительно не хватает литературы по многопоточному программированию и проектированию многопоточного программного обеспечения.

Если вышеизложенное является плохим подходом к решению проблемы, с которой я столкнулся, может ли кто-нибудь предложить способ ее улучшения или указать мне какую-либо информацию, которая объясняет хорошие способы разработки классов для потокобезопасности ??? Большое спасибо.

6
задан mathematician1975 1 August 2012 в 15:36
поделиться