NDe*_*iny 4 c++ singleton multithreading c++11
这个单例线程对于前C++ 11编译器是否安全?正如我们对C++ 11所知,它是线程安全的.
class Singleton
{
private:
Singleton(){};
public:
static Singleton& instance()
{
static Singleton INSTANCE;
return INSTANCE;
}
};
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,使这个线程安全的是C++ 11标准部分6.7 声明声明中的以下内容(强调我的):
具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的所有块范围变量的零初始化(8.5)在任何其他初始化发生之前执行.[...]否则这个变量在第一次控制通过其声明时被初始化; 这样的变量在初始化完成后被认为是初始化的.如果通过抛出异常退出初始化,则初始化未完成,因此下次控制进入声明时将再次尝试初始化.如果控制在初始化变量时同时进入声明,则并发执行应等待初始化完成.[...]
而前C++ 11部分6.7说:
[...]否则在第一次控制通过其声明时初始化这样的对象; 这样的对象在初始化完成时被认为是初始化的.如果初始化通过抛出异常退出,则初始化未完成,因此下次控件进入声明时将再次尝试.[...]
这与C++ 11没有相同的保证,所以看起来它没有被指定为C++ 11,因此你不能指望它.虽然这并不妨碍实施做出更有力的保证.
这是有道理的,因为在C++ 11之前,内存模型不包括线程.
| 归档时间: |
|
| 查看次数: |
410 次 |
| 最近记录: |