概念定义
规范既要让编译器大胆重排与缓存,又要给程序员的同步原语以确切含义。内存模型就是两者的和解:为每个并发程序列出合法结果清单,并约束锁、原子、volatile 这些能把清单收窄的操作。
工作机制
happens-before 关系连接同步动作:解锁先于后续加锁、volatile 写先于它的读、线程启动先于其首个动作。读取必须看到“按序在前的最后一次写”或任一竞争写——而竞争的严重程度由语言指定,从“定义了但很弱”到“未定义行为”不等。
使用场景
编写或评审无锁代码、解读原子操作的 memory order 参数、排查只在 ARM 上复现的诡异并发缺陷。框架作者正是用这些术语文档化它们的保证。
常见误区
内存模型由语言而非硬件定义——编译器也会重排。只推演交错是不够的:重排与存储缓冲会产生任何顺序交错都解释不了的结果。C++ 与 Rust 里数据竞争是未定义行为,编译器可能利用“竞争不存在”的假设影响远离竞争点的代码。在 x86 上靠运气工作的“普通写发布”到了 ARM 就是腐蚀;按单一架构基准弱化内存序,等于只给 ARM 用户发损坏。