gpt4 book ai didi

java - CompareAndExchange 与 CompareAndExchangeAcquire 之间有什么区别

转载 作者:行者123 更新时间:2023-12-03 08:40:48 25 4
gpt4 key购买 nike

这是 Java 库的一个片段:

public final boolean compareAndExchangeAcquire(boolean expectedValue, boolean newValue) {
return (int)VALUE.compareAndExchangeAcquire(this,
(expectedValue ? 1 : 0),
(newValue ? 1 : 0)) != 0;
}

它来自AtomicBoolean类。转换为 int 如何返回 boolean

我的主要问题:compareAndExchangecompareAndExchangeAcquire 之间有什么区别?


通俗地说:在xxxAcquire之前和xxxRelease之后编写的语句可以在应用xxx时自由地重新排序。

enter image description here

最佳答案

您发布的代码的最后一部分是!= 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 指令实现的,可以将其视为加载+存储。 compareAndExchangeAcquirecompareAndExchangeRelease 将发布/获取语义添加到相关的 CAS/load+stores 中。换句话说,您可以使用它们来阻止某些重新排序,或允许某些重新排序。

关于java - CompareAndExchange 与 CompareAndExchangeAcquire 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62869924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com