Q10·问题驱动
为什么内存模型对并发编程至关重要?
深入解答
内存模型定义了多线程程序中内存访问的可见性和顺序保证。在 L4(CPU 微架构)层面,CPU 可能重排序指令(乱序执行),每个核心有独立的缓存和写缓冲区,一个核心的写入不会立即对其他核心可见;在 L7(体系结构)层面,不同架构有不同的内存模型(x86 强内存模型,ARM/PowerPC 弱内存模型),弱内存模型允许更多的重排序以提升性能;在 L8(操作系统)层面,编程语言提供内存屏障(memory barrier)和原子操作(atomic)来控制可见性和顺序。问题:没有内存模型保证,双重检查锁定(DCL)单例模式可能返回未完全初始化的对象,发布-订阅模式可能看不到最新的发布。解决方案:使用 volatile、atomic、mutex 等同步原语。