CAS

作者: 6默默Welsh | 来源:发表于2019-03-20 09:18 被阅读0次

    compareAndSwapInt(var1, var2, var5, var5 + var4)这个

    var1:当前对象

    var2:对象在内存中偏移量

    var5:底层主内存中的值

    var5 + var4 : 底层的值加上增长量

    
    do {
    
    var5 = this.getIntVolitale(var1, var2);
    
    } while(!compareAndSwapInt(var1, var2, var5, var5 + var4))
    

    首先当前线程通过 var1:当前对象加上 var2:偏移量地址,定位到底层主内存中对应的值,读取该值到工作内存中,将值赋给 var5,在执行while 语句的 CAS 操作时,通过 var1:当前对象加上 var2:偏移量地址重新读取主内存中的值和 var5 进行比较,
    如果一样,说明在 do 语句执行完到开始执行 while 语句之间没有其他线程更新主内存的值,此时更新底层中对应的值。
    不一样说明在 do 语句执行完到开始执行 while 语句之间主内存的值被其他线程更新过了。重新走循环的逻辑(即重新读取主内存中的最新值赋给 var5),也就是所谓的自旋

    相关文章

      网友评论

          本文标题:CAS

          本文链接:https://www.haomeiwen.com/subject/jipamqtx.html