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" 规则应用于不遵循这些规则的变量。
本质上没有通用的解决方案。
通过使用您在问题中显示的构造函数,您牺牲了确定性结果,因为您无法保证构造完成后源对象和目标对象是等价的。
我的原子容器遇到了一些问题,看到了 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" 规则应用于不遵循这些规则的变量。
本质上没有通用的解决方案。
通过使用您在问题中显示的构造函数,您牺牲了确定性结果,因为您无法保证构造完成后源对象和目标对象是等价的。