news 2026/7/27 1:15:50

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/7/25 14:26:28

LobeChat是否支持Markdown渲染?技术文档写作体验评测

LobeChat是否支持Markdown渲染&#xff1f;技术文档写作体验评测 在今天&#xff0c;如果你正在用 AI 写一份技术文档、整理会议纪要&#xff0c;或是调试一段 Python 脚本&#xff0c;你大概率希望看到的不是一堆乱糟糟的原始文本&#xff0c;而是一份结构清晰、代码高亮、公式…

作者头像 李华
网站建设 2026/7/27 0:34:24

GNU make在鸿蒙PC上的使用方法

ohos-make 是为 OpenHarmony 平台编译的 GNU make 构建工具。本文档详细介绍如何在鸿蒙PC上安装和使用官方适配完成的 make 工具&#xff0c;包括 HNP 包的打包、安装和使用方法。 &#x1f4cb; 目录 一、项目概述二、为什么需要 HNP 包三、HNP 包打包方法四、安装与使用五、…

作者头像 李华
网站建设 2026/7/25 4:31:50

m4宏处理器在鸿蒙PC上的应用指南

ohos-m4 是为 OpenHarmony 平台编译的 m4 宏处理器。本文档详细介绍如何在鸿蒙PC上安装和使用官方适配完成的 m4 工具&#xff0c;包括 HNP 包的打包、安装和使用方法。 &#x1f4cb; 目录 一、项目概述二、为什么需要 HNP 包三、HNP 包打包方法四、安装与使用五、使用示例六…

作者头像 李华
网站建设 2026/7/24 5:49:01

TensorRT-LLM模型导出全解析(v0.20.0rc3)

TensorRT-LLM模型导出全解析&#xff08;v0.20.0rc3&#xff09; 在大模型推理落地的实战中&#xff0c;性能与成本的博弈从未停止。一个70B级别的模型如果直接用PyTorch原生部署&#xff0c;每秒可能只能处理几个请求&#xff0c;而通过TensorRT-LLM优化后&#xff0c;吞吐量…

作者头像 李华
网站建设 2026/7/26 11:44:08

LobeChat国际化支持现状:中文用户体验优秀

LobeChat 的中文体验为何如此出色&#xff1f; 在如今遍地开花的 AI 聊天应用中&#xff0c;大多数项目虽然底层模型支持多语言&#xff0c;但前端界面却往往“重英文、轻本地化”。尤其对于中文用户来说&#xff0c;常见的痛点比比皆是&#xff1a;输入法卡顿、光标错位、字体…

作者头像 李华
网站建设 2026/7/24 11:22:58

LobeChat能否模仿名人说话?趣味性与风险并存

LobeChat能否模仿名人说话&#xff1f;趣味性与风险并存 在一场虚拟的“对话”中&#xff0c;你向爱因斯坦请教人工智能的本质&#xff0c;他用带着德语口音的英语缓缓说道&#xff1a;“就像引力不是瞬间作用一样&#xff0c;真正的智能也需要时间弯曲逻辑。”——这不是电影桥…

作者头像 李华