关于CAS线程安全问题
来源:6-8 Java内存模型之线程独占部分-1

littleRita
2021-12-24
public final int getAndAddInt(Object var1, long var2, int var4) {
int var5;
do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
return var5;
}
翔仔你好,有两个问题想问一下你
第一个问题:在执行 var5 = this.getIntVolatile(var1, var2);后,this.compareAndSwapInt(var1, var2, var5, var5 + var4)前,var5会不会又被别的线程修改一次,那这时候是不是就会有问题了?
第二个问题:比如我现在要1+1,线程2抢先执行成功了,现在内存的值应该是2,那当前线程1没有成功执行this.compareAndSwapInt(var1, var2, var5, var5 + var4),那就会一直循环,但是这时候var2,就是第一次获取的内存的值,可能还是1,那就永远不可能等于var5了,那就会永远循环下去直到该进程结束吗?
麻烦翔仔解答了,周末愉快!
写回答
1回答
-
同学好,首先,你这个局部变量v本身就是不同线程不同的呀,并非共享变量;那前提都没成立,后面也不会被死循环了
012021-12-26
相似问题