leo*_*n22 1 c++ singleton multithreading visual-studio-2008 c++98
目前,我已经实现了迈耶单例的这一实现:
class ClassA
{
public:
static ClassA& GetInstance()
{
static ClassA instance;
return instance;
}
private:
ClassA::ClassA() {};
// avoid copying singleton
ClassA(ClassA const&);
void operator = (ClassA const&);
};
Run Code Online (Sandbox Code Playgroud)
现在,我需要进行一些改进,以确保此代码线程在C ++-98和VS-2008中安全?
谢谢!
PS:目前尚不清楚?您会看到标签visual-studio-2008和c ++-98->,因此目标操作系统是Windows!我也不明白为什么我只被某些人完全不喜欢辛格尔顿一家的人投票!
通常,Meyer单例并不是最佳的解决方案,尤其是在多线程环境中。实现单例的更通用方法是:
class ClassA
{
static ClassA* ourInstance;
// ctor's, etc.
public:
static ClassA& instance();
};
Run Code Online (Sandbox Code Playgroud)
并在源文件中:
ClassA* ClassA::ourInstance = &instance();
// This can be in any source file.
ClassA&
ClassA::instance()
{
if ( ourInstance == NULL ) {
ourInstance = new ClassA;
}
return *ourInstance;
}
Run Code Online (Sandbox Code Playgroud)
如果在进入之前没有创建线程
main(应该是这种情况),并且它不是动态加载的(也应该是这种情况,如果对象是唯一的,并且可以从静态对象的构造函数访问,则这种情况),这是线程安全的那么当静态构造函数运行时必须是它们。它还具有避免破坏问题的任何顺序的优点。
| 归档时间: |
|
| 查看次数: |
2650 次 |
| 最近记录: |