gpt4 book ai didi

单例上的 C++

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:36 27 4
gpt4 key购买 nike

我有一个单例类,我确信单例的第一次调用仅由一个线程完成。我已经通过惰性初始化实现了单例。

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();
}

我怎样才能得到这个?

最佳答案

第二个问题的答案:

class MyProtectedSingleton: public MySingleton
{
public:
void f1()
{
MySingletonLock lock;
// Other thread must wait here.
MySingleton::instance().f1();
}

void f2()
{
MySingletonLock lock;
// Other thread must wait here.
MySingleton::instance().f2();
}
};

通过 MyProtectedSingleton 中的包装器调用 f1、f2 等。

关于单例上的 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16652718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com