设计模式学习(一)单例模式增补——指令重排
目次[*]媒介
[*]指令重排简介
[*]指令重排对单例模式的影响
[*]改进方法
[*]std::call_once和std::once_flag
[*]std::atomic和内存顺序
[*]局部静态变量
[*]总结
[*]参考文章
媒介
在《单例模式学习》中曾提到懒汉式DCLP的单例模式实际也不是线程安全的,这是编译器的指令重排导致的,本文就简朴讨论一下指令重排对单例模式的影响,以及对应的解决方法。
指令重排简介
指令重排(Instruction Reordering)是编译器或处理器为了优化程序实验效率而对程序中的指令序列进行重新排序的过程。这种重排可以发生在编译时也可以发生在运行时,目标是为了淘汰指令的等待时间和提高实验的并行性。
指令重排可能会引入并发程序中的一些题目,特别是在多线程情况中,没有适当同步机制的情况下,可能会导致程序的实验效果不符合预期。
下面先容指令重排在单例模式中的影响
指令重排对单例模式的影响
首先回顾一下懒汉式DCLP单例模式的代码
class CSingleton{public: static CSingleton* getInstance();private: CSingleton() { std::cout
页:
[1]