Joh*_*ohn 3 c++ multithreading atomic atomicity c++11
我正在处理我的原子容器的一些问题并看到了这个链接.
有没有理由说std :: atomic不是可复制构造的?解决方案似乎就是这样,他们只是将T值传递给具有原子加载功能的非原子构造函数(如果我没有弄错的话).
那么一般来说,这个拷贝构造函数线程是否安全?
template<typename T>
struct MobileAtomic
{
std::atomic<T> atomic;
explicit MobileAtomic(std::atomic<T> const& a) : atomic(a.load()) {}
};
Run Code Online (Sandbox Code Playgroud)
有没有理由说std :: atomic不是可复制构造的?
是的.
当您要求可复制构造时atomic,您要求将单线程顺序一致性的"正常"规则应用于不遵循这些规则的变量.
实质上,没有通用的解决方案.
通过使用您在问题中显示的构造函数,您牺牲了确定性结果,因为您无法保证在构造完成后源和目标对象是等效的.