对java中“比较和交换”的正确性有一点疑问,因为
我仍然认为CAS也有机会丢失这些值,例如
允许共享资源S,值为5
和线程T1和T2分别想要用新值6和7更新值。
1。 T1将该值与5进行比较并找到相同的值 2. T2将值与5进行比较,发现相同 3。 T2将值设置为7 4. T1将值设置为6
所以现在这里T2设置的值丢失,因为T1读取当时为5的旧电流值。
请有人请解释一下
答案 0 :(得分:2)
由于CAS的原子性,你所描述的不可能发生。
这不是“比较然后交换”,而是“比较和交换”。没有单独的比较阶段和交换的另一个阶段。这就是它的全部美。