小记CAS中的ABA问题
2019-04-21 本文已影响0人
joy悦_06e8
问题描述:现有内存M,M里面的值为i = 1,线程A,B
现在,Thread A想将M中 i 修改为i = 2,而此时Thread A 已知 i = 1;
此时,Thread B也想对M中 i 进行修改,Thread B抢在Thread A之前将M中的 i 修改为2,
而Thread B在A之前再次将 i 修改为 i = 1。
此时Thread A 对 i = 1 进行对比,进而进行修改,此时,M中的 i 在之前已经被修改了两次,这就是ABA问题。
虽然结果一致,但过程有问题。
解决:添加一个版本号version = 0,每次才做进行 + 1 操作,即便值一样,也可以根据版本号来识别。