C++怎么实现线程安全

本文介绍了C++中线程安全的对象管理,特别是使用muduo库学习线程安全。强调了shared_ptr和weak_ptr在解决析构函数中的竞态条件问题,以及如何在多线程环境中确保对象生命周期的正确管理。同时讨论了构造对象的线程安全、互斥变量的销毁挑战,并提出了对象池的概念以降低数据共享。
摘要由CSDN通过智能技术生成

muduo库学习笔记1-C++多线程系统编程

  • 网上都说这本书很适合初学者入门学习, 我今天开始准备从头再来;
第一章线程安全的对象管理
  • 对象的生与死不能由对象自身拥有的mutex(互斥器)来保护;
  • 如何避免对象析构时可能存在的race conditon(竞态条件)是C++多线程编程面临的基本问题, C++借用shared_ptr和weak_ptr完美解决;
  • shared_ptr和weak_ptr是实现线程安全的Observer设计模式的必备技术;
当析构函数遇到多线程
  • C++要求程序员自己管理对象的生命期, 这在多线程环境下显得尤为困难; 因为析构的时候会出现一些问题:
    • 在即将析构一个对象时, 怎么知道其他线程正在使用该对象的成员函数;
    • 如何保证我在使用一个对象的时候, 没有其他线程来析构这个对象;
    • 调用一个对象之前, 如何知道这个对象还活着, 它的析构函数会不会碰巧执行到一半?
      • 可以简单的通过shared_ptr进行一劳永逸的解决这些问题;
  • 什么是线程安全?
    • 一个线程安全的类(class)应当满足三个条件:
      • 多个线程同时访问时, 其表现出正确的行为;
      • 无论操作系统如何调度这些线程, 无论这些线程的执行顺序如何交织(interleaving);
      • 调用端的代码无需额外的同步或其他协调动作;
  • 锁的封装都可以进行临界区的处理(Critical section) -- 也就是把加锁放在构造函
  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值