Con*_*hai 0 java concurrency java-14
这是 Java 库中的一个片段:
public final boolean compareAndExchangeAcquire(boolean expectedValue, boolean newValue) {
return (int)VALUE.compareAndExchangeAcquire(this,
(expectedValue ? 1 : 0),
(newValue ? 1 : 0)) != 0;
}
Run Code Online (Sandbox Code Playgroud)
它来自AtomicBoolean
课堂。演员怎么能int
返回一个boolean
?
我的主要问题:compareAndExchange
vs之间有什么区别compareAndExchangeAcquire
?
通俗地说:在申请之前xxxAcquire
和之后写的语句xxxRelease
可以自由重新排序xxx
。
您发布的代码的最后一部分是!= 0
. 随着澄清变量:
int a = (int)VALUE.compareAndExchangeAcquire(this,
(expectedValue ? 1 : 0),
(newValue ? 1 : 0));
return a != 0;
Run Code Online (Sandbox Code Playgroud)
当然,!=
运算符返回一个布尔值。
至于问题的第二部分:
另外,compareAndExchange 与 compareAndExchangeAcquire 之间有什么区别?
首先是一些必读的内容:https : //stackoverflow.com/a/16181675/3424746
从上面的答案你应该明白编译器/处理器可以重新排序加载/存储,以及获取和释放的限制。比较和交换最有可能通过 CAS 指令实现,可以将其视为加载 + 存储。compareAndExchangeAcquire
和compareAndExchangeRelease
释放/获取语义添加到CAS /负载+存储问题。换句话说,您可以使用这些来防止某些重新排序,或允许某些重新排序。
归档时间: |
|
查看次数: |
292 次 |
最近记录: |