JohnZorn
V2EX  ›  Java

cas

  •  
  •   JohnZorn · Jan 14, 2019 · 1839 views
    This topic created in 2705 days ago, the information mentioned may be changed or developed.
    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? 高速缓存?
    求老哥们解惑
    
    2 replies    2019-01-14 18:14:34 +08:00
    fuchaofather
        1
    fuchaofather  
       Jan 14, 2019
    谈谈我的理解:
    cpu 内部寄存器包括 cache**对应用程序透明**由硬件 MMU 管理, 所以我的理解底层实际就是主存, cache 一致性是由一致性协议保证的, 至于你说的问题 2, cas 是指令级别的这个不用担心
    知识有限, 可能有误, 仅供参考
    fuchaofather
        2
    fuchaofather  
       Jan 14, 2019
    emm...我说的底层是主存指值, 至于是不是从 cache 读的那就是 mmu 的事儿了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5050 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:11 · PVG 09:11 · LAX 18:11 · JFK 21:11
    ♥ Do have faith in what you're doing.