std::atomic<T> 复制构造函数的 C++11 线程安全

C++11 Thread safety of std::atomic<T> copy constructors

我的原子容器遇到了一些问题,看到了 this link

为什么 std::atomic 不可复制构造?解决方案似乎是 this 他们只是将 T 值传递给具有原子加载函数的非原子构造函数(如果我没记错的话)。

所以一般来说,这个拷贝构造函数线程安全吗?

template<typename T>
struct MobileAtomic
{
    std::atomic<T> atomic;

    explicit MobileAtomic(std::atomic<T> const& a) : atomic(a.load()) {}

};

为什么std::atomic不能复制构造?

当您要求可复制构造 atomic 时,您是在要求将单线程顺序一致性的 "normal" 规则应用于不遵循这些规则的变量。

本质上没有通用的解决方案。

通过使用您在问题中显示的构造函数,您牺牲了确定性结果,因为您无法保证构造完成后源对象和目标对象是等价的。