[英]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.