如果 compareAndSet 失败,下面的代码是否仍然执行?
If compareAndSet fails, is the code below still executed?
我有一个非常愚蠢的问题。
如果我使用 AtomicReferences compareAndSet
这样
original.set(atomic.get());
long next = some new value
atomic.compareAndSet(original.get(), next);
....more code....
如果比较失败(即原子已被另一个线程更新),是否还会更新更多代码。
我正在尝试查找作业中的错误,这是我唯一能想到的事情,我已经尝试了几个小时。
P.S。
奇怪的是,如果我在此代码上使用同步
它在我的笔记本电脑上给了我正确的答案,但在我的台式机上却没有
MangatRaiModi 和 SotiriosDelimanolis 让我走上了正确的道路。
一个简单的修复:
original.set(atomic.get());
long next = some new value
while(!atomic.compareAndSet(original.get(), next))
{
do above again
}
....more code....
做到了。
仍然不确定同步如何在我的笔记本电脑上而不是在我的台式机上修复此问题。
我猜它正在减慢移动芯片上的线程速度,以便它们可以按顺序运行(如 Print 语句)。
不过我可能错了。
我有一个非常愚蠢的问题。 如果我使用 AtomicReferences compareAndSet 这样
original.set(atomic.get());
long next = some new value
atomic.compareAndSet(original.get(), next);
....more code....
如果比较失败(即原子已被另一个线程更新),是否还会更新更多代码。 我正在尝试查找作业中的错误,这是我唯一能想到的事情,我已经尝试了几个小时。
P.S。 奇怪的是,如果我在此代码上使用同步 它在我的笔记本电脑上给了我正确的答案,但在我的台式机上却没有
MangatRaiModi 和 SotiriosDelimanolis 让我走上了正确的道路。 一个简单的修复:
original.set(atomic.get());
long next = some new value
while(!atomic.compareAndSet(original.get(), next))
{
do above again
}
....more code....
做到了。 仍然不确定同步如何在我的笔记本电脑上而不是在我的台式机上修复此问题。 我猜它正在减慢移动芯片上的线程速度,以便它们可以按顺序运行(如 Print 语句)。 不过我可能错了。