25
我有一个类,我可以有许多实例。它内部创建并初始化来自第三方库(使用一些全局变量)的一些成员,并且不是线程安全的。在类中使用静态互斥锁
我想过使用静态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`
我需要这样的静态成员的一些特殊的初始化?
使用静态互斥锁有什么不对吗?
编辑:链接问题在CPP
boost::mutex MyClass::mx;
如果您使用静态互斥锁,您将序列化所有类的实例,完全否定您可能通过多线程获得的任何好处。你确定你想要吗? – 2010-03-17 14:56:45
@John Dibling 是的,只有创建和销毁对象才会受到保护 - 它不会经常发生。剩下的时间,这些实例将被使用而不锁定互斥锁,它应该是非常有效的。 – 2010-03-17 15:03:54
@Dmity:这引出我的下一个问题:你确定没有锁定的情况下使用这些实例是安全的吗? – 2010-03-17 16:05:23