CAS理解

一、概念
CAS:Compare and Swap,即比较再交换。CAS是乐观锁的一种实现方式。
        对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。CAS是CPU指令级的操作,只有一步原子操作

二、应用场景
乐观锁的适用场景于就是读多写少的场景。
若发生大量的线程对一个数据库行进行写操作,那么会有大量的写冲突失败操作,系统的性能消耗更大,并发量也没有提高,反而不如使用传统的互斥锁
      
  阿里云-java编码规范    

并发修改同一记录时,避免更新丢失,需要加锁。要么在应用层加锁,要么在缓存加 锁,要么在数据库层使用乐观锁,使用 version 作为更新依据。 说明:如果每次访问冲突概率小于 20%,推荐使用乐观锁,否则使用悲观锁。乐观锁的重试次 数不得小于 3 次
       
三、CAS的缺点:
CAS虽然很高效的解决了原子操作问题,但是CAS仍然存在三大问题。
循环时间长开销很大。
只能保证一个共享变量的原子操作。
ABA问题。(如果内存地址V初次读取的值是A,并且在准备赋值的时候检查到它的值仍然为A)

发布了37 篇原创文章 · 获赞 12 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章