std::atomic_ref与无锁数据结构
请介绍C++20引入的std::atomic_ref,及其与std::atomic的区别。
回答
孤独的心
std::atomic_ref<T>(C++20)对已有的非原子对象提供原子操作,不拥有该对象。
int value = 0;
{
std::atomic_ref<int> ref(value);
ref.store(42, std::memory_order_release); // 原子写
int x = ref.load(std::memory_order_acquire); // 原子读
} // ref析构后,value恢复非原子访问
与std::atomic的区别:
atomic拥有数据,atomic_ref引用外部数据atomic_ref对象生命周期内目标对象必须存活atomic_ref适合对已有非原子结构的部分字段做原子操作atomic_ref要求目标对象的生命周期覆盖所有并发访问
典型场景:并发更新数组元素、对共享内存中的对象做原子操作。