繁体   English   中英

易失的Singleton成员?

[英]Volatile Singleton member?

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

我的问题是,是否应该像这样使公共静态成员易变:

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
}

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

它具有使用嵌入式世界和其他地方的功能。 如果您想拥有某个变量的最新视图,可以将其标记为volatile

但是,它与多线程无关。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM