共计 533 个字符,预计需要花费 2 分钟才能阅读完成。
乐观锁是将资源锁住,等一个之前取得锁的线程开释锁之后,下一个线程才能够 拜访。
而乐观锁采取了一种宽泛的态度,通过某种形式不加锁来解决资源,比方 通过给记录加 version 来获取数据,性能较乐观锁有很大的进步。
CAS 是 compare and swap 的缩写,即咱们所说的比拟和替换。
cas 是一种基于锁的操作,是乐观锁的一个典型代表。
CAS 操作蕴含三个操作数 —— 内存地位(V)、预期原值(A)和新值 (B)。如果内存地址外面的值和 A 的值是一样的,那么就将内存外面的值更新成 B。
CAS 是通过有限循环来获取数据的,若果在第一轮循环中,a 线程获取地址外面的值 被 b 线程批改了,那么 a 线程须要自旋,到下次循环才有可能机会执行。
CAS 的会产生什么问题?
1.ABA 问题
CAS 须要在操作值的时候查看内存值是否发生变化,没有发生变化才会更新内存值。然而如果内存值原来是 A,起初变成了 B,而后又变成了 A,那么 CAS 进行查看时会发现值没有发生变化,然而实际上是有变动的。
ABA 问题的解决思路就是在变量后面增加版本号,每次变量更新的时候都把版本号加一,这样变动过程就从“A-B-A”变成了“1A-2B-3A”。
2、循环工夫长开销大。CAS 操作如果长时间不胜利,会导致其始终自旋,给 CPU 带来十分大的开销。
正文完