gpt4 book ai didi

c++ - 有没有一种方法可以使用 std::atomic 的 compare_exchange_strong 方法来交换不平等?

转载 作者:行者123 更新时间:2023-12-05 02:35:50 32 4
gpt4 key购买 nike

我有一个原子类型,我需要将它与一个值进行原子比较,如果这两个值不相等,则交换原子的值。

换句话说,compare_exchange_strong 基本上以原子方式执行此操作:

if (atomic_value == expected)
atomic_value = desired;

...我正在寻找一种方法来做到这一点:

if (atomic_value != expected)
atomic_value = desired;

(是的,我知道 compare_exchange_strong 使用按位相等进行比较,而不是 == 运算符。而且我知道 expected 的值被赋值当比较失败时。这只是为了说明目的。在我的用例中,无论比较结果如何,我都不需要原子的值。)

有没有什么方法可以做到这一点而不必退回到使用锁而不是 std::atomic

最佳答案

auto observed = atomic_value.load();
for (;;)
{
if (observed == expected){
break; // no exchange
}
if (atomic_value.compare_exchange_weak(observed, desired)) {
break; // successfully exchanged observed with desired
}
}

当然,它在硬件具有 LL/SC 的架构上不是最优的,因为 C++ 不公开它。用LL/SC可以有任意条件。

关于c++ - 有没有一种方法可以使用 std::atomic 的 compare_exchange_strong 方法来交换不平等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70440451/

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