c++ 在类中使用静态互斥

lqfhib0f  于 2023-03-25  发布在  其他
关注(0)|答案(2)|浏览(141)

我有一个类,我可以有很多示例。在里面,它创建和初始化一些成员从第三方库(使用一些全局变量),并不是线程安全的。
我考虑过使用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`

1.我是否需要对这样的静态成员进行一些特殊的初始化?
1.使用静态互斥有什么问题吗?

**编辑:**链接问题已修复,cpp中定义正确

boost::mutex MyClass::mx;
w46czmvw

w46czmvw1#

你已经声明了,但是还没有定义你的类静态互斥体。

boost::mutex MyClass::mx;

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

pgvzfuti

pgvzfuti2#

这个问题是很久以前提出的,但只是为了更新帖子,现在你可以使用inline variable

inline static std::mutex mx;

解决这些联系问题。

相关问题