C++智能指针的多线程同步

如果一个类A内含有一个共享指针,指向一个对象。而在另一个线程中,有另一个类B也需要访问这个对象,最常见的方式是让这个类A提供一个接口,返回这个对象的智能指针,由于在多个线程中,所以这个接口必须和类A内其他访问这个共享指针的接口加互斥锁。

但这并不能保证线程安全,因为这个接口返回后,就会有两个线程中的两个句柄指向这个对象,也就是说一个对象的共享指针在两个线程中,这是很常见,却非常危险的行为。对于这种场景,有两个解决方案:

1. 深拷贝

从根源上避免线程互斥问题

2. 互斥锁导出,然后在类B内对类A加锁

[[nodiscard]] auto lock() -> std::unique_lock<std::mutex> {
    return std::unique_lock<std::mutex>(m_local_obj_);
}

3. 对指针所指向对象的每个访问接口都加锁

将互斥责任转移给底层

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值