cas

2019-01-14 17:51:15 +08:00
 choice4
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? 高速缓存?
求老哥们解惑
1305 次点击
所在节点    Java
2 条回复
fuchaofather
2019-01-14 18:12:29 +08:00
谈谈我的理解:
cpu 内部寄存器包括 cache**对应用程序透明**由硬件 MMU 管理, 所以我的理解底层实际就是主存, cache 一致性是由一致性协议保证的, 至于你说的问题 2, cas 是指令级别的这个不用担心
知识有限, 可能有误, 仅供参考
fuchaofather
2019-01-14 18:14:34 +08:00
emm...我说的底层是主存指值, 至于是不是从 cache 读的那就是 mmu 的事儿了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/526980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX