← 中文资源

简体中文版本

语言内存模型

语言内存模型定义多线程读取“合法可见”的取值范围,在编译器优化自由与程序所需的同步保证之间划界。

阅读英文原文

概念定义

规范既要让编译器大胆重排与缓存,又要给程序员的同步原语以确切含义。内存模型就是两者的和解:为每个并发程序列出合法结果清单,并约束锁、原子、volatile 这些能把清单收窄的操作。

工作机制

happens-before 关系连接同步动作:解锁先于后续加锁、volatile 写先于它的读、线程启动先于其首个动作。读取必须看到“按序在前的最后一次写”或任一竞争写——而竞争的严重程度由语言指定,从“定义了但很弱”到“未定义行为”不等。

使用场景

编写或评审无锁代码、解读原子操作的 memory order 参数、排查只在 ARM 上复现的诡异并发缺陷。框架作者正是用这些术语文档化它们的保证。

常见误区

内存模型由语言而非硬件定义——编译器也会重排。只推演交错是不够的:重排与存储缓冲会产生任何顺序交错都解释不了的结果。C++ 与 Rust 里数据竞争是未定义行为,编译器可能利用“竞争不存在”的假设影响远离竞争点的代码。在 x86 上靠运气工作的“普通写发布”到了 ARM 就是腐蚀;按单一架构基准弱化内存序,等于只给 ARM 用户发损坏。