Java中的CAS
2020-04-04 本文已影响0人
lc_666
CAS
- Compare And Swap;
- CAS中使用了三个基本操作数:内存位置(V)、预期原值(A)和新值(B);
- 更新变量时,只有当V中的值与A相同才会修改为B;
- CAS是通过无限循环来获取数据,如果获取数据同预期不同,则需要自旋(循环判断条件是否满足);
CAS的缺点
- CPU开销大;
- 不能保证代码块的原子性,只能保证一个变量的原子性;
- 会发生ABA问题,即预期的值A在线程阻塞时,发生了
A->B->A
的过程;- 解决的方案是增加一个版本号;