C 11 std :: atomic copy构造函数的线程安全性
作者:互联网
我在使用原子容器时遇到了一些问题,并看到了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不是可复制构造的?
是.
当您要求复制可构造原子时,您要求将单线程顺序一致性的“正常”规则应用于不遵循这些规则的变量.
实质上,没有通用的解决方案.
通过使用您在问题中显示的构造函数,您牺牲了确定性结果,因为您无法保证在构造完成后源和目标对象是等效的.
标签:c,c11,multithreading,atomicity,atomic 来源: https://codeday.me/bug/20190830/1766485.html