- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 Java 库的一个片段:
public final boolean compareAndExchangeAcquire(boolean expectedValue, boolean newValue) {
return (int)VALUE.compareAndExchangeAcquire(this,
(expectedValue ? 1 : 0),
(newValue ? 1 : 0)) != 0;
}
它来自AtomicBoolean
类。转换为 int
如何返回 boolean
?
我的主要问题:compareAndExchange
与 compareAndExchangeAcquire
之间有什么区别?
通俗地说:在xxxAcquire
之前和xxxRelease
之后编写的语句可以在应用xxx
时自由地重新排序。
最佳答案
您发布的代码的最后一部分是!= 0
。带有澄清变量:
int a = (int)VALUE.compareAndExchangeAcquire(this,
(expectedValue ? 1 : 0),
(newValue ? 1 : 0));
return a != 0;
当然,!=
运算符返回一个 boolean 值。
至于问题的第二部分:
Also, what is the difference between compareAndExchange vs compareAndExchangeAcquire?
首先一些必读内容:https://stackoverflow.com/a/16181675/3424746
从上面的答案中,您应该了解编译器/处理器可以重新排序加载/存储,以及获取和释放对它们的限制。比较和交换很可能是通过 CAS 指令实现的,可以将其视为加载+存储。 compareAndExchangeAcquire
和 compareAndExchangeRelease
将发布/获取语义添加到相关的 CAS/load+stores 中。换句话说,您可以使用它们来阻止某些重新排序,或允许某些重新排序。
关于java - CompareAndExchange 与 CompareAndExchangeAcquire 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62869924/
我想比较和交换 3 个原子变量: std::atomic a; std::atomic expected; std::atomic new; int expectedValue = std::atom
这是 Java 库的一个片段: public final boolean compareAndExchangeAcquire(boolean expectedValue, boolean newVal
我是一名优秀的程序员,十分优秀!