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

时间:2015-01-06 00:11:27

标签: c++ multithreading c++11 atomic atomicity

我正在查看原子容器的一些问题并看到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()) {}

};

1 个答案:

答案 0 :(得分:5)

为什么std :: atomic不是可复制构造的?

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

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

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