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

相关文章

  • 6、多线程

    synchronized关键字与CAS机制 synchronized:悲观锁CAS 机制:乐观锁当程序的并发量比较...

  • [转]Java中的CAS操作以及锁机制详解

    原文: Dyson~ - Java中的CAS操作以及锁机制详解 1. 关于CAS操作 CAS:Compare An...

  • (转载)Java CAS 和 synchronized 和 Lo

    原文链接:Java CAS 和 synchronized 和 Lock - CSDN博客 CAS 机制 适用场景:...

  • CAS知识摘抄(摘自:程序员小灰)

    什么是CAS? CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。 CAS机制当中使...

  • CAS机制

    还有就是这个atomic包,使用可以达到synchronized的效果,实现原理就是CAS了。 CAS也叫自旋锁,...

  • CAS机制

    加了同步锁之后,count自增的操作变成了原子性操作,所以最终输出一定是count=200,代码实现了线程安全。虽...

  • CAS机制

    CAS(Compare-And-Swap)算法保证数据操作的原子性。 CAS 算法是硬件对于并发操作共享数据的支持...

  • CAS机制

    当两个线程同时操作一个变量时,会拿到当前变量的值 如A = 0; A++此时,预期旧值则是A = 0 新值=1对...

  • CAS机制

    一、为什么需要CAS机制? 为什么需要CAS机制呢?我们先从一个错误现象谈起。我们经常使用volatile关键字修...

  • CAS机制

    原子操作 原子操作(atomic)就是不可分割的操作,在计算机中,就是指不会因为线程调度被打断的操作。通俗讲就是你...

网友评论

      本文标题:CAS机制

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