Sud*_*rma 3 c++ multithreading
参考: - "现代C++设计:应用的通用编程和设计模式"作者:Andrei Alexandrescu第6章实现单例.
即使你放入挥发性物质,也不能保证双重检查锁定模式安全和便携.为什么会这样?
如果有人能够提供任何一个很好的链接来解释什么是宽松的记忆模型以及什么是双重检查模式的确切问题.{或者有人可以解释}
我曾经认为volatile已经解决了这个问题,但在我读完这本书之前似乎不正确.
即使你放入挥发性物质,也不能保证双重检查锁定模式安全和便携.为什么会这样?
我会尝试提供一些背景信息.
在C++中有三个(Boehm和McLaren)便携式用例volatile,其中没有一个与多线程有关.Alexandrescu的没有拿出一个黑客很长一段时间回哄骗C++的类型系统,以帮助多线程编程,但就是这样.请参阅David Butenhof 关于comp.programming.threads 的回复.
关于这个限定符的混淆源于这样一个事实:一些编译器(例如英特尔)volatile带来了内存屏障语义 - 这是安全多线程所需要的.但这不是便携式的,不应该依赖它.
此外,大多数专业级编译器都无法volatile完美实现.见Regehr等人.
混淆可能与Java(另一种语言)具有完全不同的语义volatile并且它们确实涉及内存栅栏这一事实有很大关系.但请注意,即使是Double Checked Locking 也不是免于问题.