Meyers Singleton线程安全与C++-98
Meyers Singleton thread safe with C++-98
目前我有meyer单例的实现:
class ClassA
{
public:
static ClassA& GetInstance()
{
static ClassA instance;
return instance;
}
private:
ClassA::ClassA() {};
// avoid copying singleton
ClassA(ClassA const&);
void operator = (ClassA const&);
};
现在,我需要一些改进来确保C++-98和VS-2008中的代码线程安全?!
谢谢!
PS:什么不清楚?你可以看到标签visual-studio-2008和c++-98->所以目标操作系统是Windows!我也不明白为什么我被投票否决了——有些人根本不喜欢辛格尔顿的!
Meyer单例并不是最好的解决方案,而且尤其是在多线程环境中。更一般的实现单例的方法是:
class ClassA
{
static ClassA* ourInstance;
// ctor's, etc.
public:
static ClassA& instance();
};
并且在源文件中:
ClassA* ClassA::ourInstance = &instance();
// This can be in any source file.
ClassA&
ClassA::instance()
{
if ( ourInstance == NULL ) {
ourInstance = new ClassA;
}
return *ourInstance;
}
如果在进入前没有创建线程,则这是线程安全的main
(应该是这种情况),并且它不是动态的已加载(如果对象要是唯一的,并且可以从static的构造函数访问对象,则当静态构造函数运行)。它还具有避免任何顺序破坏问题。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 虚拟决赛作为安全
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 通过网络、跨平台传递std::变体是否安全
- 在std::thread中,joinable()然后join()线程安全吗
- 使用std::istream::peek()总是安全的吗
- 从值小于256的uint16到uint8的Endian安全转换
- 在c++队列中使用pop和visit实现线程安全
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 安全到标准:移动会员?
- AcquireCredentialsHandleA() 返回 PFX 文件的0x8009030e(安全包中没有可用的凭据
- 共享队列的线程安全
- boost::文件系统::recursive_directory_iterator多线程安全
- 在 C++98 中写入单个字符串以"线程安全"吗
- Meyers Singleton线程安全与C++-98