【发布时间】:2022-01-23 04:05:08
【问题描述】:
我有一个原子类型,我需要将它与一个值进行原子比较,如果两个值不相等,则交换原子的值。
换句话说,compare_exchange_strong 本质上是原子地执行此操作:
if (atomic_value == expected)
atomic_value = desired;
...我正在寻找一种方法来做到这一点:
if (atomic_value != expected)
atomic_value = desired;
(是的,我知道compare_exchange_strong 使用按位相等进行比较,而不是== 运算符。而且我知道当比较失败时会分配expected 的值。这仅用于说明目的。在我的用例中无论比较结果如何,我都不需要原子的值。)
有什么方法可以做到这一点而不必依赖使用锁而不是std::atomic?
【问题讨论】:
-
看看是否有任何建议的答案在 LL/SC 架构上得到最佳编译会很有趣,在机器级别,这实际上只是一个逆向测试的问题。
标签: c++ atomic stdatomic compare-and-swap