我有一个可以有很多实例的类。它在内部创建并初始化来自第三方库(使用一些全局变量)的一些成员,并且不是线程安全的。
我考虑过使用 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`
我是否需要对此类静态成员进行一些特殊初始化?
使用静态互斥体有什么问题吗?
Edit:通过 cpp 中的正确定义修复了链接问题
boost::mutex MyClass::mx;
您已声明但未定义类静态互斥体。只需添加一行
boost::mutex MyClass::mx;
到带有 MyClass 实现的 cpp 文件中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)