CAS(比较和SWAP)工作完全正常吗?

时间:2014-11-21 10:05:17

标签: java multithreading synchronization thread-safety

对java中“比较和交换”的正确性有一点疑问,因为

我仍然认为CAS也有机会丢失这些值,例如

允许共享资源S,值为5

和线程T1和T2分别想要用新值6和7更新值。

1。 T1将该值与5进行比较并找到相同的值 2. T2将值与5进行比较,发现相同 3。 T2将值设置为7 4. T1将值设置为6

所以现在这里T2设置的值丢失,因为T1读取当时为5的旧电流值。

请有人请解释一下

1 个答案:

答案 0 :(得分:2)

由于CAS的原子性,你所描述的不可能发生。

这不是“比较然后交换”,而是“比较和交换”。没有单独的比较阶段和交换的另一个阶段。这就是它的全部美。