java - CAS(比较和交换)工作正常吗?

标签 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

现在,当 T1 读取旧的当前值(当时为 5)时,T2 设置的值丢失了。

谁能解释一下吗

最佳答案

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

这不是“比较然后交换”,而是“比较并交换”。没有单独的比较阶段和交换阶段。这就是它的全部魅力。

关于java - CAS(比较和交换)工作正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27058727/

相关文章:

java - 如何在java中对hashmap进行排序?

c# - 多写者单读者并发模型的最有效锁?

ios - For Loop - Alamofire 以同步方式请求 Swift4 - 执行 for 循环等待直到异步请求返回

java - 通过网络发送屏幕截图

java - 如何将原始 XML 传递到 RESTTemplate POST 或 PUT 方法而不进行转换?

java - ObjectInputStream 阻止我的套接字

multithreading - 循环计数和线程数之间的混淆以及有关线程生命周期的查询

java - java中多线程场景下的列表更新

windows - 文件创建时间的准确性是多少?

java - 同步 textArea.clear() 后跟 textArea.setText() 不会清除文本