1つのスレッドだけがコンテナーにアイテムを追加したり、コンテナーからアイテムを削除したりできるように、スレッドセーフなコンテナーを(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++全般に関する本をたくさん読んだことがありますが、マルチスレッドプログラミングとマルチスレッドソフトウェアデザインに関する文献は本当に不足しているようです。
上記が問題を解決するための不十分なアプローチである場合、誰かがそれを改善する方法を提案するか、スレッドセーフになるようにクラスを設計するための良い方法を説明するいくつかの情報を私に指摘することができますか?どうもありがとう。