我有一个类,我可以有很多实例。在其内部,它从第3方库(使用一些全局变量)创建并初始化一些成员,并且不是线程安全的。

我考虑过使用静态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
}


I cannot link because I receive error:

undefined reference to `MyClass::mx`
  • 我需要对此类静态成员进行一些特殊的初始化吗?
  • 使用静态互斥锁有什么问题吗?

  • 编辑:在cpp中使用正确的定义解决了链接问题
    boost::mutex MyClass::mx;
    

    最佳答案

    您已声明但未定义您的类静态互斥量。只需添加行

    boost::mutex MyClass::mx;
    

    使用MyClass的实现将其添加到cpp文件中。

    10-04 13:37
    查看更多