关于CAS

  CAS是乐观锁的一种实现。CAS是Compare And Swap的缩写,是一种高效的处理并发的机制,说他高效是由于CAS是cpu的一个指令,能够在指令层面上来进行操做(非CPU指令操做须要多个CPU指令组合才可以完成功能,因此效率有影响);至于并发处理,是由于CAS操做首先是一个原子操做(CPU指令已经确立了原子地位),其次CAS有三个参数:V,E,N,首先Compare一下,变量V的值是否和E相同,若是相同则更新为值N,若是不相同则须要从新获取,作逻辑判断再更新。数据库

  首先咱们讲一下乐观锁,乐观锁是一种“读多写少”场景的假设。因此会有ABA的问题,好比有两个线程:线程1,线程2;线程1讲数据(原始为A)改成B,后来又改成A;线程2读取发现是A,就认为数据并无修改,继续对数据进行修改成B。并发

  乐观锁/ 悲观锁在技术层面的实现为:函数

  数据库:乐观锁, verseion字段判断;悲观锁,select ...for update;post

  JVM:乐观锁,CAS;悲观锁:sync/reentrylock;线程

  CAS在Java中具体应用就是原子类,好比AtomicInteger里面的“getAndAccumulate"函数,就是经过轮训的方式来尝试修改;这个也说明了CAS主要用于读多写少的场景,由于若是大量的并发修改将会致使CAS的屡次轮训get

 

参考:io

http://www.javashuo.com/article/p-tvmfmess-w.html效率

https://www.zhihu.com/question/23284469变量

相关文章
相关标签/搜索