gex*_*ide 12 c++ thread-safety double-checked-locking c++11
考虑到线程安全的双重检查锁定(对于单例或懒惰初始化),我已经阅读了很多问题.在某些线程中,答案是模式完全被破坏,其他人提出了解决方案.
所以我的问题是:有没有办法在C++中编写一个完全线程安全的双重检查锁定模式?如果是这样,它看起来如何.
我们可以假设C++ 11,如果这让事情变得更容易.据我所知,C++ 11改进了内存模型,可以产生所需的改进.
我知道通过使用双重检查保护变量volatile可以在Java中实现.由于C++ 11从Java中借用了大部分内存模型,所以我认为它有可能,但是如何?
Gri*_*zly 17
只需使用静态局部变量进行延迟初始化的单例,如下所示:
MySingleton* GetInstance() {
static MySingleton instance;
return &instance;
}
Run Code Online (Sandbox Code Playgroud)
(C++ 11)标准已经保证静态变量以线程安全的方式初始化,并且它的实现似乎至少与您自己编写的任何内容一样强大且高效.
初始化的安全性可以在(C++ 11)标准的第6.6.4节中找到:
如果控制在初始化变量时同时进入声明,则并发执行应等待初始化完成.
| 归档时间: |
|
| 查看次数: |
4733 次 |
| 最近记录: |