我的编译器是clang 18.1.0-rc1;以下代码会触发两个警告:
#include <atomic>
std::atomic<int> n;
int main() {
// Warning: Memory order argument to atomic operation is invalid
n.load(std::memory_order_acq_rel);
// Warning: Memory order argument to atomic operation is invalid
n.store(1, std::memory_order_acq_rel);
}
std::memory_order_acq_rel
的合法用法是什么?
对于像
fetch_add
这样的 RMW 来说,它是有效的,可以在一次操作中加载和存储。
acq_rel
的获取部分对加载端有效,释放部分对存储端有效。