我有一个类,我可以有很多示例。在里面,它创建和初始化一些成员从第三方库(使用一些全局变量),并不是线程安全的。
我考虑过使用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;
2条答案
按热度按时间w46czmvw1#
你已经声明了,但是还没有定义你的类静态互斥体。
使用MyClass的实现添加到cpp文件中。
pgvzfuti2#
这个问题是很久以前提出的,但只是为了更新帖子,现在你可以使用
inline variable
:解决这些联系问题。