多くのインスタンスを持つことができるクラスがあります。内部では、(一部のグローバル変数を使用する)サードパーティのライブラリから一部のメンバーを作成および初期化し、スレッドセーフではありません。
静的なboost :: mutexを使用することを考えました。これは、クラスのコンストラクターとデストラクターでロックされます。したがって、私のスレッド間でインスタンスを作成および破棄することは、サードパーティのメンバーにとって安全です。
class MyClass
{
static boost::mutex mx;
// 3rd party library members
public:
MyClass();
~MyClass();
};
MyClass::MyClass()
{
boost::mutex::scoped_lock scoped_lock(mx);
// create and init 3rd party library stuff
}
MyClass::~MyClass()
{
boost::mutex::scoped_lock scoped_lock(mx);
// destroy 3rd party library stuff
}
エラーが発生したためリンクできません:
undefined reference to `MyClass::mx`
そのような静的メンバーの特別な初期化が必要ですか?
静的ミューテックスの使用に問題はありますか?
編集:リンクの問題はcppの正しい定義で修正されています
boost::mutex MyClass::mx;
クラス静的ミューテックスを宣言しましたが、定義していません。行を追加するだけです
boost::mutex MyClass::mx;
myClassの実装を含むcppファイルに。