CAS (compare and swap/ compare and exchange)
比较与交换:不需要加锁实现的多线程安全访问?
ABA问题,在比较当前值的时候,中间有值被修改 ,由原本的0 修改为2之后 再有线程修改为0 即:A -> B -> A 经过转换之后,再次比较读出的虽然是A 但是已经不是原来的A。
有人说:A还是A啊 ,有什么关系?
假设:张三的女朋友跟张三分手后,经历了100个男朋友,然后再与张三复合。那么他们还是原来的他们吗?
ps:例子有些不太美妙,但是记忆深刻,万事理解就好
ABA问题解决: 添加版本号,每次更新就更新版本号,版本号不能相同,就如同Git上的索引
**CAS是如何实现的?
原子性的实现大多与下图中的lock有关系