У меня есть класс, который может иметь много экземпляров. Внутри он создает и инициализирует некоторые члены из сторонней библиотеки (которые используют некоторые глобальные переменные) и не является потокобезопасным.
Я думал об использовании static 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;