我有一个单例类,我确信单例的第一次调用仅由一个线程完成。我已经用延迟初始化实现了单例。
class MySingleton : private boost::noncopyable {
public:
/** singleton access. */
static MySingleton & instance()
{
static MySingleton myInstance;
return myInstance;
}
void f1();
void f2();
void f3();
void f4();
private:
MySingleton();
};
现在我有另一个工厂类,负责在单线程环境中创建所有单例。单例可以在多个线程中使用,并且方法受到互斥锁的保护。
第一个问题
这种方法可以接受吗?
第二个问题
我有一个必须是线程安全的复杂类。
这个类必须是一个单例。调用类的不同方法怎么可能是线程安全的。例如。
{
MySingletonLock lock;
// Other thread must wait here.
MySingleton::instance().f1();
MySingleton::instance().f3();
}
我怎样才能得到这个?