当前位置: 首页 > news >正文

C++编程指南23 - 在无关线程之间共享资源时应使用shared_ptr

一:概述

        当多个线程需要共享一个堆内存(即动态分配的内存)时,如果这些线程之间没有直接关系,比如它们的生命周期不重叠,那么使用 shared_ptr(智能指针)是最安全的做法。

        因为如果有多个线程要共享一块内存,而且这块内存需要在某个时候被删除,直接用普通指针可能会导致一些问题,比如内存泄漏或者在某个线程结束时,其他线程仍然在访问这块已经被删除的内存。

        shared_ptr 是一种智能指针,它会自动管理内存的释放。只有当所有的线程都不再使用这块内存时,shared_ptr 才会销毁它,避免了内存泄漏和重复释放的问题。

二:代码示例

#include <iostream>
#include <memory>
#include <thread>

void threadFunction(std::shared_ptr<int> sharedData) {
    // 每个线程都可以访问并修改共享的内存
    std::cout << "Thread is accessing shared data: " << *sharedData << std::endl;
    (*sharedData) += 10;
}

int main() {
    // 创建一个 shared_ptr,指向一个动态分配的整数
    std::shared_ptr<int> data = std::make_shared<int>(5);

    // 创建多个线程,共享同一块内存
    std::thread t1(threadFunction, data);
    std::thread t2(threadFunction, data);

    // 等待线程完成
    t1.join();
    t2.join();

    // 主线程访问共享的数据
    std::cout << "Main thread sees the data: " << *data << std::endl;

    return 0;
}

三:例外情况:

        1. 静态对象:像全局变量那样的静态对象,不需要特别管理,因为它们的生命周期是固定的,不依赖于某个线程。

        2. 永不删除的内存:如果内存永远不需要被删除,那就可以共享。

        3. 对象所有权:如果一个线程拥有某个对象,另一个线程共享它是安全的,只要第二个线程的生命周期没有超出第一个线程的生命周期。

相关文章:

  • IntelliJ IDEA 华为云远程开发配置步骤
  • 通用文件模型
  • Axure设计之数据列表动态列设置/列筛选案例
  • 设计模式Python版 状态模式
  • 开发者社区测试报告(功能测试+性能测试)
  • 尚硅谷爬虫note14
  • ZooKeeper 基本概述
  • 意向锁的目的
  • 探索数据仓库自动化:ETL流程设计与实践
  • 【Pandas】pandas Series swaplevel
  • Python爬虫实战:一键采集电商数据,掌握市场动态!
  • 自然语言处理(NLP)中文文本预处理主流方法
  • python中采用opencv作常规的图片处理的方法~~~
  • 华为OD机试-发现新词的数量(Java 2024 E卷 100分)
  • Kafka 消息不丢失:全方位保障策略
  • redis菜鸟教程
  • 【MATLAB源码-第271期】基于matlab的雷达发射回波模拟,包括匹配滤波,加窗旁瓣控制,以及MTD处理。
  • C++ STL string容器全解析
  • 解锁健康密码,踏上养生之旅
  • 《基于WebGPU的下一代科学可视化——告别WebGL性能桎梏》
  • 电子商务网站建设需求说明书/百度推广的渠道有哪些
  • 网站 备案/怎么做推广比较成功
  • 在线学习平台网站建设有什么功能/独立站推广
  • 成都工业学院文献检索在哪个网站做/俄罗斯搜索引擎yandex推广
  • 建站重庆/bt蚂蚁磁力搜索天堂
  • 大连手机自适应网站建设价格/看颜色应该搜索哪些词汇