假设期望值var2等于2,更新至var4等于1
当T1执行:var5 = this.getIntVolatile(var1, var2); 获取到:var5 =2,
这时,T2获得cpu的时间,执行:var5 = this.getIntVolatile(var1, var2); 也获取到:var5 =2,
接着执行:this.compareAndSwapInt(var1, var2, var5, var5 + var4)),由于满足var2 = var5 ,
做了:var5 + var4 的操作,此时var5 等于3.
之后T1获得cpu时间,执行:this.compareAndSwapInt(var1, var2, var5, var5 + var4)),
这时T1的var5等于2还是等于3,这时我疑惑的地方,如果等于2,那满足cas,结果就会有问题,
如果等于3,那是为什么会等于3。
我有看到有人在ABA问题中也有相同的疑问,看了老师的解答我还是没明白。
---------------------------------- 分割线 ------------------------------
我又看了下老师在其他cas问题的答疑,我之前的理解有误差,说的是var5是期望值,
执行this.compareAndSwapInt(var1, var2, var5, var5 + var4)) 的时候是和var1中的值进行比较
this.compareAndSwapInt方法是这一条cpu指令执行,满足原子性。
我的新疑惑是:
var5 如果是预期值, var2的作用是什么,
如果var5 是和var1中的值进行比较,那在this.compareAndSwapInt方法里比较,应该是用预期的var5的值,和var1在主内存中的值比较才有意义把。