我有一个使用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
}
答案 0 :(得分:4)
C ++中的volatile
关键字与其他语言中的volatile
关键字不同。在C ++中,它意味着编译器将确保始终从内存中重新读取该值,并且永远不会使用缓存值。
它有使用嵌入式世界和其他地方。如果您希望始终拥有某个变量的最新视图,请将其标记为{{1}}。
它与多线程没有任何关系。
您不应该在多线程环境中使用单例,因为当多个线程尝试访问您的对象时,它将成为争用的原因。这将导致你的程序滞后,并且它首先完全失败了。
您应该传递对象,并且您应该能够根据需要创建新对象。
如果你不能这样做,请检查你的设计。