std:shared_ptr源码解读

本文通过对std::shared_ptr的源码分析,揭示了其并非完全线程安全的事实。详细讨论了共享指针的内部实现,包括智能指针保存的对象类型、加锁策略以及引用计数的原子操作。尽管在某些情况下引用计数的增加是原子的,但如swap函数等操作在多线程环境下并不保证线程安全,需要额外的同步措施。
摘要由CSDN通过智能技术生成

之前没阅读shared_ptr的代码,对它仅有的印象就是它是线程安全的。最近突然有同事告知,其他它不是线程安全的。于是,阅读分析了下源码。

源码中都是满满的模板类。

shared_ptr<_Tp>继承自__shared_ptr<_Tp>,其功能主要由父类__shared_ptr 实现。

__shared_ptr 中有两个模板定义的类型,第一个 Tp 就是 智能指针想保存的对象的类型。第二个Lp是加锁的策略 _Lock_policy,有三种策略:

  // Available locking policies:
  // _S_single    single-threaded code that doesn't need to be locked.
  // _S_mutex     multi-threaded code that requires additional support
  //              from gthr.h or abstraction layers in concurrence.h.
  // _S_atomic    multi-threaded code using atomic operations.

默认使用 shared_ptr时,是没有传入这个策略的。这个策略的指定,是在编译期间,根据编译参数自行选择。

  // Compile time constant that

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值