news 2026/5/1 6:01:36

shared_ptr 快照用于安全地并发读取,无需拷贝

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
shared_ptr 快照用于安全地并发读取,无需拷贝

需求:A线程会修改T类型的变量x,B线程要读取x,由于x很大,B读取和操作的时候需要加锁,这样会占用很长的x的时间。

解决办法:

方法1:

B线程先加锁拷贝x到x_copy,然后锁可以释放,后面操作x_copy。但是拷贝也是很耗时的;

std::mutex mtx; T x; // 假设T是需要保护的大对象 // B线程读取逻辑 T x_copy; { std::lock_guard<std::mutex> lock(mtx); x_copy = x; // 拷贝x到x_copy } // 后续操作x_copy(无需加锁)

方法2:

不要维护x,维护std::shared_ptr<const T> x_ptr。然后B线程加锁复制 x_ptr_copy = x_ptr (只是创建了shared_ptr新增计数,没有发生拷贝),然后锁可以释放,B线程后续读取x_ptr_copy时读的是旧内容,即使此时x_ptr被A线程改变了,也不影响B的旧内容。

std::mutex mtx; std::shared_ptr<const T> x_ptr = std::make_shared<T>(); // A线程修改逻辑 { std::lock_guard<std::mutex> lock(mtx); auto new_ptr = std::make_shared<T>(*x_ptr); // 深拷贝 // 修改new_ptr指向的对象... x_ptr = std::move(new_ptr); // 原子替换 } // B线程读取逻辑 std::shared_ptr<const T> x_ptr_copy; { std::lock_guard<std::mutex> lock(mtx); x_ptr_copy = x_ptr; // 仅增加引用计数 } // 后续操作x_ptr_copy(无需加锁)

注意,这里用std::shared_ptr<const T>里的const非常重要,它保证了x_ptr的对象内容不会改变。想修改x_ptr只能整体替换指针指向对象,而不能改变当前指向对象的具体内容。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 4:51:20

2026药物研发必备检索工具排行:从入门到专业级全方位解析

在药物研发与创新情报分析领域&#xff0c;选择合适的文献检索工具不是“多就好”&#xff0c;而是“全与准”。随着AI驱动检索、全球竞争加剧、研发成本居高不下&#xff0c;科研人员、药企研发团队和医学生必须跳出单纯查文献的思维框架&#xff0c;转向整合文献、专利、临床…

作者头像 李华
网站建设 2026/4/18 10:48:29

AnythingLLM入门与实战:安装、配置与RAG应用

AnythingLLM&#xff1a;让文档开口说话的智能知识引擎 在信息爆炸的时代&#xff0c;我们每个人都在与越来越多的文档打交道——技术手册、研究报告、会议纪要、合同条款……但真正能被“用起来”的知识却少之又少。大多数时候&#xff0c;这些文件只是静静地躺在硬盘里&#…

作者头像 李华
网站建设 2026/4/18 9:53:46

无人船+ADCP:水文测量的革命性组合

无人船与声学多普勒流速剖面仪&#xff08;ADCP&#xff09;的创新性结合&#xff0c;正在以一种前所未有的方式深刻地改变着传统的水文测量模式。这种技术上的融合不仅极大地提升了水文测量工作的整体效率&#xff0c;还显著增强了测量过程的安全性&#xff0c;同时在数据采集…

作者头像 李华
网站建设 2026/4/25 22:43:20

SGLang部署Qwen3-32B与多模态模型实战

SGLang部署Qwen3-32B与多模态模型实战 在构建现代AI应用的今天&#xff0c;一个核心挑战浮出水面&#xff1a;如何让像Qwen3-32B这样的超大规模语言模型&#xff0c;在真实业务场景中既跑得快、又扛得住高并发&#xff1f;传统推理引擎虽然成熟&#xff0c;但在处理长上下文对话…

作者头像 李华
网站建设 2026/5/1 4:27:06

TensorFlow-GPU环境配置全流程详解

TensorFlow-GPU环境配置全流程详解 在深度学习项目中&#xff0c;训练速度往往是决定开发效率的关键。当你面对一个包含百万参数的模型&#xff0c;用CPU跑一次训练可能需要十几个小时&#xff0c;而换成GPU后却能在几十分钟内完成——这种质的飞跃&#xff0c;正是TensorFlow…

作者头像 李华