Mih*_*yan 5 c++ multithreading thread-safety shared-ptr
同时复制和重置shared_ptr是否安全?
即考虑以下代码
// Main thread (before creating any other threads)
shared_ptr<A> a(new A(1));
// Thread 1
shared_ptr<A> a_copy = a;
// Thread 2
a.reset(new(A(2));
Run Code Online (Sandbox Code Playgroud)
线程1和2并行运行.我可以确定,它a_copy会将指针存储到较旧的A(1)或较新的A(2)共享对象吗?
所有成员函数(包括拷贝构造和拷贝赋值)可以通过在多线程调用不同实例的
shared_ptr没有即使这些实例是副本并共享相同的对象的所有权额外的同步.
所以,答案是否定的 - 这些操作不是线程安全的,因为复制和重置都应用于同一个实例,a.结果是数据竞争,导致未定义的行为.