-
核心原理:先比较预期计算结果和当前计算结果,如果相同,则将当前值替换为预期计算结果(或当前计算结果),否则重新计算,重新比较。
例如:A,B两个线程同时修改一个变量v=1,分别对v执行加1操作,此时A,B线程的预期计算结果均为v+1=2;如果A先执行了操作,则有预计计算结果=2,当前计算结果=v+1=1+1=2,两值相等,故改变v的值为2;当B执加1操作时,则有预计计算结果=2,当前计算结果=v+1=2+1=3,两值不相等,B线程放弃此时执行当结果,重新计算,新的预期计算结果为v+1=3,重新执行上述过程。 -
优点:
CAS算法常用实现乐观锁,并发量不是很高时可提高效率。 -
缺点:
- 循环时间长开销很大:CAS算法需要不断地自旋来读取最新的内存值,长时间读取不到就会造成不必要的CPU开销;
- 只能保证一个共享变量的原子操作;
- ABA问题:一个线程将内存值从A改为B,另一个线程又从B改回到A。
2020.10.12
网友评论