c++ - std::shared_ptr 中的计数器是原子的吗?
问题描述
在采访中,有人问我计数器的特殊性是什么std::shared_ptr
(它是原子的)。但是,我听到一些意见认为std::shared_ptr
多线程并不适用。什么是真的?
解决方案
所有成员函数(包括复制构造函数和复制赋值)都可以由多个线程在 shared_ptr 的不同实例上调用而无需额外同步,即使这些实例是副本并共享同一对象的所有权。如果多个执行线程在没有同步的情况下访问同一个 shared_ptr 并且这些访问中的任何一个使用 shared_ptr 的非常量成员函数,则将发生数据竞争;原子函数的 shared_ptr 重载可用于防止数据竞争。
换句话说,您可以安全地构造和复制它们,但共享对象本身不受保护。
推荐阅读
- entity-framework - 如何在批量数据实体框架中使用 take 和 skip
- javascript - 如何在 POST 方法中获取失败时从 express 而不是状态 500 中获取实际错误?
- api - (如何)实现 Facebook Marketplace 列表和销售自动化?
- flutter - Facebook Audience Network 和 Flutter facebook 广告在 fkutter 中不起作用
- python - Python Bokeh 添加基于 python 对象的警报
- node.js - TypeError:user.authenticate 不是函数
- node.js - 使用节点js在父函数中使用子数据
- php - 搜索过滤器引导卡未显示特定图像
- c - do-while 有什么用
- plotly - 如何使用破折号按钮运行 go.Scatter 的动画图?