可见性
单核 CPU
1.1 在单 CPU 时代,不会有缓存同步问题。 cpu 从内存中将数据加载到高速 cache,运算完成后写往 cache 更新数据,再需要(具体时机是什么?)将 cache 数据写入内存。虽然是在多线程的环境中,但由于由始至终都是操作同一块内存或 cache,不存在数据不一致的问题。
(单个 cpu 图)
1.2 在多 CPU 时代,不同线程的执行可以被分发到不同的 CPU 上,与此同时同一块内存的数据将加载两个甚至更多不同 CPU 的 cache 中,每个 CPU 在自己的 cache 中更新数据,这就产生不缓存不一致的情况。
(补充例子,如 A B 两个 cpu ,同时写一块内存 m,将 m 分别加载到 cache_a、cache_b,各自更新为 v1, v2)
1.3 volatile 关键字是在 cpu 写 cache 的时候,对 cache 加锁
原理:补充缓存一致性协议
补充代码示例,javap 将代码编译为中间机器码,前后对比有没有 volatile 关键字,机器码有什么不同
- 有序性
网友评论