原始 Java 内存模型(1996)
Java 是第一个试图写下多线程程序保证的主流语言。它包括:
- 互斥体(mutex),并定义了它们隐含的内存排序要求。
- “volatile” 原子变量: volatile 变量的所有读和写都需要直接在主内存中按程序顺序执行,使得对 volatile 变量的操作以顺序一致的方式进行。
- 制定了(或者至少试图制定)具有数据竞争的程序的行为。
缺陷⌗
- Atomic 需要同步:volatile 原子变量是不同步的,所以它们无助于消除程序其余部分的竞争。不能用于构建新的同步原语。
- 一致性与编译器优化不兼容:Java 编译器公共子表达式消除(common subexpression elimination)会导致其他线程写入新值无法对消除后表达式生效。