CAS机制

作者: J_Feng | 来源:发表于2020-12-04 18:35 被阅读0次
     内存值,预期旧值(常说我们的变量),新值
    

    当两个线程同时操作一个变量时,会拿到当前变量的值 如A = 0; A++
    此时,预期旧值则是A = 0 新值=1
    对内存操作是单线程的,每次与内存中的值进行对比,如果旧值=实际要操作的预期旧值 则++,否则表示被其他线程修改过
    Synchronized 会进行不断的上锁,释放锁的操作,从便量锁逐步升级 到重量锁,在内核中的切换(资源浪费如何定义?)。但是如果cas线,程量多的话,也会导致大量的线程自旋(类似于while(true))空转,导致资源的浪费
    高并发下为何推荐sync?同样也是内核切换,资源也会耗费较高

    CAS的缺点:
    1.CPU开销较大
    在并发量比较高的情况下,如果许多线程反复尝试更新某一个变量,却又一直更新不成功,循环往复,会给CPU带来很大的压力。
    2.不能保证代码块的原子性
    CAS机制所保证的只是一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量共同进行原子性的更新,就不得不使用Synchronized了。
    3.ABA问题
    这是CAS机制最大的问题所在。
    什么是ABA问题?怎么解决?我们下一期来详细介绍。

    参考:https://blog.csdn.net/bjweimengshu/article/details/78949435#:~:text=CAS%E6%98%AF%E8%8B%B1%E6%96%87%E5%8D%95%E8%AF%8DCompare,%E7%9A%84%E5%80%BC%E4%BF%AE%E6%94%B9%E4%B8%BAB%E3%80%82&text=2.%E6%AD%A4%E6%97%B6%E7%BA%BF%E7%A8%8B1,%E5%8F%98%E9%87%8F%E7%9A%84%E5%80%BC%E5%A2%9E%E5%8A%A01%E3%80%82

    相关文章

      网友评论

          本文标题:CAS机制

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