CAS

CAS

  1. synchronized关键字与Lock等锁机制都是悲观锁:无论做何种操作,首先都需要先上锁,接下来再去执行后续操作,从而确保了接下来的所有操作都是由当前这个线程来执行的。
    2.乐观锁:线程在操作之前不会做任何预先的处理,而是直接去执行;当在最后执行变量更新的时候,当前线程需要有一-种机制来确保当前被操作的变量是没有被其他线程修改的; CAS是乐观锁的一种极为重要的实现方式。
    CAS (Compare And Swap)
    比较与交换:这是一个不断循环的过程,一直到变量值被修改成功为止。CAS本身是由硬件指令来提供支持的,换句话说,硬件中是通过一个原子指令来实现比较与交换的;因此,CAS可以确保变量操作的原子性的。

对于CAS来说,其操作数主要涉及到如下三个:
1.需要被操作的内存值v
2.需要进行比较的值A
3.需要进行写入的值B
只有当v==A的时候,CAS才会通过原子操作的手段来将v的值更新为B。

关于CAs的限制或是问题:
1.循环开销问题:并发量大的情况下会导致线程一直自旋
2.只能保证一一个变量的原子操作:可以通过AtomicReference来实现对多 个变量的原子操作

  1. ABA问题: 1 -> 3 ->1 (可以考虑增加版本号)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容