在类中使用静态互斥锁

时间:2010-03-17 14:21:41

标签: c++ linux multithreading boost

我有一个课,我可以有很多实例。在里面它创建并初始化来自第三方库(使用一些全局变量)的一些成员,并且不是线程安全的。

我想过使用静态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`
  1. 我是否需要对此类静态成员进行一些特殊初始化?

  2. 使用静态互斥锁有什么问题吗?


  3. 修改:链接问题已在cpp

    中使用正确的定义修复
    boost::mutex MyClass::mx;
    

1 个答案:

答案 0 :(得分:44)

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

即可
boost::mutex MyClass::mx;
使用MyClass的实现

到cpp文件。