如何在线程安全类C++中编写复制构造函数

Arg*_*Pal 1 c++ multithreading mutex copy-constructor

template<typename T>
class TSQueue {
public:
    TSQueue() {}
    TSQueue(const TSQueue& rhs) {
        lock_guard<mutex> lg1(rhs._mutex);
        _data = rhs._data;
    }

private:
    queue<shared_ptr<T> > _data;
    mutex _mutex;

};
Run Code Online (Sandbox Code Playgroud)

我在教科书中看到,只有源代码(rhs)被锁定在复制构造函数中。我不确定如何仅通过锁定 rhs 来确保对目的地(此)的独占访问。我认为源和目的地都应该被锁定。编写线程安全复制构造函数的理想方法是什么?

Pet*_*ker 6

当构造函数运行时,它会创建一个新对象;不可能从另一个线程访问该对象,因为没有代码可以将该对象(当前不存在)传递给另一个线程。所以没有必要保护正在构建的对象。