其他分享
首页 > 其他分享> > C 11 std :: atomic copy构造函数的线程安全性

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