Подтвердить что ты не робот

Использование статического мьютекса в классе

У меня есть класс, который может иметь много экземпляров. Внутри он создает и инициализирует некоторые члены из сторонней библиотеки (которые используют некоторые глобальные переменные) и не является потокобезопасным.

Я думал об использовании 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;
4b9b3361

Ответ 1

Вы объявили, но не определили свой статический мьютекс класса. Просто добавьте строку

boost::mutex MyClass::mx;

в файл cpp с реализацией MyClass.