复制具有原子成员的类的构造函数

MRB*_*MRB 5 c++ multithreading atomic

我有一个原子成员的类,我想写一个复制构造函数:

struct Foo
{
    std::atomic<int> mInt;

    Foo() {}
    Foo(const Foo& pOther)
    {
        std::atomic_store(mInt, std::atomic_load(pOther.mInt, memory_order_relaxed), memory_order_relaxed);
    }
};
Run Code Online (Sandbox Code Playgroud)

但我不知道我必须使用哪种顺序,因为我不知道将在何时何地调用此复制构造函数.

我可以使用relaxed复制构造函数和赋值运算符的顺序吗?

Col*_*nee 3

不,如果您不知道如何使用它,那么memory_order_seq_cst为了安全起见,您应该使用它。如果您使用memory_order_relaxed,您可能会遇到指令重新排序的问题。