首页 > 解决方案 > std::shared_ptr 中的计数器是原子的吗?

问题描述

在采访中,有人问我计数器的特殊性是什么std::shared_ptr(它是原子的)。但是,我听到一些意见认为std::shared_ptr多线程并不适用。什么是真的?

标签: c++c++11shared-ptratomic

解决方案


所有成员函数(包括复制构造函数和复制赋值)都可以由多个线程在 shared_ptr 的不同实例上调用而无需额外同步,即使这些实例是副本并共享同一对象的所有权。如果多个执行线程在没有同步的情况下访问同一个 shared_ptr 并且这些访问中的任何一个使用 shared_ptr 的非常量成员函数,则将发生数据竞争;原子函数的 shared_ptr 重载可用于防止数据竞争。

换句话说,您可以安全地构造和复制它们,但共享对象本身不受保护。


推荐阅读