我正在查看原子容器的一些问题并看到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()) {}
};
答案 0 :(得分:5)
为什么std :: atomic不是可复制构造的?
是
当您要求复制可构造atomic
时,您要求将单线程顺序一致性的“正常”规则应用于不遵循这些规则的变量。
实质上,没有通用的解决方案。
通过使用您在问题中显示的构造函数,您牺牲了确定性结果,因为您无法保证在构造完成后源和目标对象是等效的。