CodeWalk

std::atomic_ref与无锁数据结构

作者:孤独的心 · 2026-05-30 12:55

请介绍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的区别:

  1. atomic拥有数据,atomic_ref引用外部数据
  2. atomic_ref对象生命周期内目标对象必须存活
  3. atomic_ref适合对已有非原子结构的部分字段做原子操作
  4. atomic_ref要求目标对象的生命周期覆盖所有并发访问

典型场景:并发更新数组元素、对共享内存中的对象做原子操作。