我一直在这里阅读有关线程安全的单例模式:
http://en.wikipedia.org/wiki/Singleton_pattern#C.2B.2B_.28using_pthreads.29
它在底部说,唯一安全的方法是使用 pthread_once - 这在 Windows 上不可用。
这是保证线程安全初始化的唯一方法吗?
我在 SO 上读过这个帖子:
并且似乎暗示了原子操作系统级别的交换和比较功能,我假设在 Windows 上是:
http://msdn.microsoft.com/en-us/library/ms683568.aspx
这可以做我想要的吗?
编辑:我想要延迟初始化,并且只有一个类的实例。
另一个站点上的某个人提到在命名空间内使用全局变量(他将单例描述为反模式) - 它怎么可能是“反模式”?
接受的答案:
当我使用 Visual Studio 2008 时,我
接受了Josh 的回答- 注意:对于未来的读者,如果您不使用此编译器(或 2005) - 不要使用接受的答案!
编辑: 代码工作正常,除了 return 语句 - 我收到一个错误:错误 C2440:'return':无法从'volatile Singleton *'转换为'Singleton *'。我是否应该将返回值修改为 volatile Singleton *?
编辑:显然 const_cast<> 将删除 volatile 限定符。再次感谢乔希。