0

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

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

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
}
4

1 回答 1

4

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

它有它使用的嵌入式世界和其他地方。如果您想始终查看某个变量的最新视图,请将其标记为volatile.

然而,它与多线程无关。

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

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

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

于 2013-03-07T11:02:47.523 回答