社区
C++ 语言
帖子详情
请问C++11的std::shared_ptr 是否是线程安全的呢?
firendlys
2013-05-07 02:27:43
std::shared_ptr 里面最关键的部分是引用计数,那么不知道这个引用计数是否是线程安全的呢?
如果不是,那么应该如何在多线程环境中保证线程安全呢?
(这里的线程安全是指 shared_ptr 本身(也就是引用计数模块了),shared_ptr指向的用户对象不属讨论范围.)
...全文
567
1
打赏
收藏
请问C++11的std::shared_ptr 是否是线程安全的呢?
std::shared_ptr 里面最关键的部分是引用计数,那么不知道这个引用计数是否是线程安全的呢? 如果不是,那么应该如何在多线程环境中保证线程安全呢? (这里的线程安全是指 shared_ptr 本身(也就是引用计数模块了),shared_ptr指向的用户对象不属讨论范围.)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
一叶之舟
2013-05-07
打赏
举报
回复
指针和引用计数是线程安全的,但指针所指对象中的操作就需要自己做控制,并不是线程安全的。
c++11
下,
std
::
shared
_
ptr
线程安全
的探究
shared
_
ptr
线程安全
的实现
C++11
的
std
::
shared
_
ptr
是否是
线程安全
结论:指针和引用计数是
线程安全
的,但指针所指对象中的操作就需要自己做控制,并不是
线程安全
的。
std
::
shared
_
ptr
大概总结有以下几点: (1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用的资源。 (2) 使用引用计数来标识是否有多余指针指向该资源。(注意,shart_
ptr
本身指针会占1个引用) (3) 在赋值操作中, 原来资源的引用计数会减一,新指向的资源引用计数会加一。 (4)引用计数加一/减一操作是原子性的,所以
线程安全
的。 (5) make_
shared
要优于.
C++11
三种主要的智能指针类型:
std
::unique_
ptr
,
std
::
shared
_
ptr
, 和
std
::weak_
ptr
C++11
智能指针
线程安全
性分析:unique_
ptr
需要外部同步保证
线程安全
;
shared
_
ptr
的引用计数操作是原子的,但对象访问仍需同步;weak_
ptr
通过lock()方法间接利用
shared
_
ptr
的
线程安全
特性。三种智能指针都不能保证所管理对象的
线程安全
访问,必须配合互斥锁等同步机制使用。文章通过代码示例展示了weak_
ptr
解决循环引用问题和避免悬空指针的特性,并指出在多线程环境中应结合原子操作或同步原语确保安全性。
设计模式:21 单例模式
#ifndef SINGLETON_H #define SINGLETON_H #include #include using namespace
std
; /* 关键: 1 双重检查机制: //先判断如果第一次创建,然后枷锁,然后在判断是否为空,实例化;如果一进入就加锁,那么效率不好; //如果判断完了再进入加锁,那么多个进程仍然会多次实例化, if(0 ==
C++11
中智能指针:
shared
_
ptr
的引用计数是
线程安全
的吗?
摘要:
shared
_
ptr
的引用计数是
线程安全
的,因其控制块采用原子操作保证增减安全。但管理的对象本身并非
线程安全
,多线程访问需额外加锁。此外,多个
shared
_
ptr
指向同一对象时
线程安全
,但直接修改同一个
shared
_
ptr
实例(如重置)仍需同步机制。简言之,引用计数安全≠对象安全≠实例操作安全。
C++ 语言
65,212
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章