对java中“比较和交换”的正确性有一点疑问,因为
我仍然认为这个 CAS 也有机会丢失这些值,例如
让共享资源 S ,值为 5
线程 T1 和 T2 想要分别用新值 6 和 7 更新值。
1. T1将该值与5进行比较,发现相同 2. T2与5比较,发现相同 3. T2 将值设置为 7 4.T1设置值为6
现在,当 T1 读取旧的当前值(当时为 5)时,T2 设置的值丢失了。
谁能解释一下吗
最佳答案
由于 CAS 的原子性,您所描述的情况不可能发生。
这不是“比较然后交换”,而是“比较并交换”。没有单独的比较阶段和交换阶段。这就是它的全部魅力。
关于java - CAS(比较和交换)工作正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27058727/