Volatile Singleton会员?

时间:2013-03-07 10:55:27

标签: c++ multithreading locking singleton volatile

我有一个使用Singleton软件设计模式的状态引擎。可以通过多个线程访问状态引擎。该对象在程序启动时从主线程初始化,不适用于Lazy初始化。

我的问题是,我应该像这样使公共静态成员变得不稳定:

class CStateEngine final
{
    private:
        /* Contains the Singleton object */
        static CStateEngine* instance;
    protected:
        CStateEngine();
    public:
        static CStateEngine* Instance() volatile;   // Returns the Singleton instance
        static void DeleteInstance() volatile;  // Deletes the Singleton instance
}

1 个答案:

答案 0 :(得分:4)

C ++中的volatile关键字与其他语言中的volatile关键字不同。在C ++中,它意味着编译器将确保始终从内存中重新读取该值,并且永远不会使用缓存值。

它有使用嵌入式世界和其他地方。如果您希望始终拥有某个变量的最新视图,请将其标记为{{1}}。

它与多线程没有任何关系。

您不应该在多线程环境中使用单例,因为当多个线程尝试访问您的对象时,它将成为争用的原因。这将导致你的程序滞后,并且它首先完全失败了。

您应该传递对象,并且您应该能够根据需要创建新对象。

如果你不能这样做,请检查你的设计。