其他分享
首页 > 其他分享> > c – 我可以同时复制一个shared_ptr吗?

c – 我可以同时复制一个shared_ptr吗?

作者:互联网

我知道在两个单独的线程中复制和重置单个shared_ptr是有问题的,但是有两个线程试图创建同一个shared_ptr对象的副本.它需要同步吗?参考计数器在这里是否正常工作?

std::shared_ptr<T> global_t(new T());

// Thread 1
std::shared_ptr<T> t1(global_t);
do something with t1

// Thread 2
std::shared_ptr<T> t2(global_t);
do something with t2

解决方法:

一个std :: shared_ptr的refcount is synchronized,所以并发复制是可以的(尽管可能性能较差).并且只有在其refcount降至零时才会释放托管对象.

标签:c,c11,multithreading,shared-ptr,atomicity
来源: https://codeday.me/bug/20190722/1502194.html