准确的说,shared_ptr做为一个类本身不是线程安全的。
shared_ptr指向的对象的生存周期管理这件事,在通过shared_ptr操作时是线程安全的。
所以,如果你将一个shared_ptr对象的引用传到不同线程里,很容易就会出现BUG
而如果是不同的shared_ptr对象,即使它们指向的是同一个资源,它们在+1-1时是线程安全的,或者更准确的说操作是原子的。
【 在 namelij (namelij) 的大作中提到: 】
: 标 题: 请教个shared_ptr的问题
: 发信站: 水木社区 (Tue Jul 14 14:23:19 2020), 站内
:
: shared_ptr是线程安全的,指的是shared_ptr本身,而不包括其所指向的对象
:
: 我现在有个疑问,有一个shared_ptr<T> pt = make_shared<T>();
: 在线程A中使用,在线程A中出其作用域的时候,判断其引用计数为0,则准备释放
: 在线程B中,对pt进行赋值操作,其引用计数++
:
: 那么现在的疑问是这种现象shared_ptr是如何保证不出问题的
:
: 因为在线程B操作的时候,线程A因为引用计数为0,已经将其指向的对象删除
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 39.155.212.*]
--
FROM 76.126.252.*