do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
说是 var1 是变量值,
问题 1.var5 是底层读取值 (底层是哪?。。主存吗)
在 var2 == var5 时 var1 = var5 + var4
问题 2.线程中判断到 var2 == var5 后,(还未执行 var1 = var5 + var4 时),瞬间。var2 让其他线程改掉了。
这不就不安全了吗? 所以说底层还是加锁了吗(这会这个底层又是哪呢)
我记着以前看过一个视频说是这一步是通过特殊硬件保证的?)
问题 3.什么是底层啊?主存? c++? cpu? 高速缓存?
求老哥们解惑
1
fuchaofather 2019-01-14 18:12:29 +08:00
谈谈我的理解:
cpu 内部寄存器包括 cache**对应用程序透明**由硬件 MMU 管理, 所以我的理解底层实际就是主存, cache 一致性是由一致性协议保证的, 至于你说的问题 2, cas 是指令级别的这个不用担心 知识有限, 可能有误, 仅供参考 |
2
fuchaofather 2019-01-14 18:14:34 +08:00
emm...我说的底层是主存指值, 至于是不是从 cache 读的那就是 mmu 的事儿了
|