我需要实现(在 C++ 中)一个线程安全的容器,使得只有一个线程能够从容器中添加或删除项目。我以前通过在线程之间共享互斥体来完成这种事情。这导致我的代码中到处都是互斥对象,使事情变得非常混乱且难以维护。
我想知道是否有一种更整洁、更面向对象的方式来做到这一点。我想到了以下围绕容器的简单类包装器(半伪 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++ 的书籍,但似乎确实缺乏关于多线程编程和多线程软件设计的文献。
如果上述方法是解决问题的糟糕方法,那么任何人都可以提出改进方法,或者向我指出一些信息,这些信息解释了将类设计为线程安全的好方法???非常感谢。