《使用mudo C++网络库》p56的update怎么理解

iCode王者伟业 iCode王者伟业 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

typedef std::pair<string, int> Entry;
typedef std::vector<Entry> EntryList;
typedef std::map<string, EntryList> Map;
typedef boost::shared_ptr<Map> MapPtr;

void CustomerData::update(const string& customer, const EntryList& entries)
{
muduo::MutexLockGuard lock(mutex_);
if (!data_.unique())
{
MapPtr newData(new Map(*data_));
data_.swap(newData);
}
assert(data_.unique());
(*data_)[customer] = entries;
}

书上解释意图是:如果更新数据的时候其他线程在读,就不能在原来的数据上修改,得创建一个副本,在副本上修改完了再替换。
Ps:
1、data_是类成员,保存原始数据

可是按这个代码理解,就是,当我发现其他线程在读data_的时候,我以data_的数据创建一个副本,然后把newData和data_直接交换。
可是交换的时候新的数据还没有插入,而且newData本来就是用data_的数据做的副本,这个swap有什么意义,data_和newData是同样的数据。这个副本完全没有创建的必要,按这个代码写法。
...全文

相关推荐

Godot引擎C++绑定开发指南:GDExtension性能优化与第三方库集成

在游戏开发中,脚本语言如GDScript虽然易于上手,但在处理复杂逻辑和密集计算时可能遇到性能瓶颈。通过C++绑定技术,开发者可以将高性能的本地代码与游戏引擎结合,实现性能的显著提升。这项技术的核心原理是利用动态链接库在运行时扩展引擎功能,既保持了开发灵活性,又提供了接近原生代码的执行效率。其技术价值在于能够复用庞大的C++生态库,实现精细的内存控制,并保护核心算法逻辑。在应用场景上,特别适合性能敏感型游戏、已有C++代码库的整合、以及引擎深度定制需求。本文聚焦于Godot Engine的GDExtensi

weixin_34174105

C++简历项目选择与优化指南:提升求职竞争力

网络编程和系统编程是C++开发者的核心技能领域,涉及TCP/IP协议、多线程、内存管理等底层原理。理解这些技术原理对于构建高性能系统至关重要,特别是在后端开发和基础设施领域。通过实践Web服务器、内存池等项目,开发者能够掌握高并发处理和性能优化等关键技术价值。在C++求职场景中,企业重点关注项目对底层原理的体现和系统设计能力。本文基于C++岗位的实际需求,提供项目选择标准和简历优化方案,帮助开发者避免技术栈分散和项目不对口的常见问题,突出网络编程和性能优化等核心能力。

weixin_30855099

C++高性能Web服务器实战:从阻塞到事件驱动,QPS提升6倍

在构建高并发网络服务时,传统的阻塞式I/O模型会面临C10K问题的挑战,即难以支撑上万并发连接。其核心瓶颈在于线程资源耗尽和I/O等待造成的CPU浪费。事件驱动与非阻塞I/O模型通过单线程或少量线程管理所有连接,利用epoll或kqueue等系统调用监听就绪事件,从根本上解决了线程上下文切换的开销和I/O阻塞问题,从而大幅提升吞吐量和降低延迟。这种架构的技术价值在于能够以极低的资源开销处理海量连接,是实现高性能网关、即时通讯和API服务器的基石。本文以一次真实的性能调优项目为例,详细阐述了如何通过React

weixin_30378623

《21天学通C++》第8版:从环境配置到实战项目的现代C++学习指南

C++作为一门核心的系统级编程语言,其价值在于对内存管理、性能优化等底层机制的深刻理解。其原理涉及指针、面向对象、模板等核心概念,这些是构建高性能、高可靠性软件的技术基石。掌握C++不仅能解决如 `error MSB3428` 等常见的开发环境配置问题,更能为游戏开发、高性能计算和嵌入式系统等应用场景提供强大的底层支持。本文以经典的《21天学通C++》教材为线索,探讨如何通过系统学习,结合现代工具如AI编程助手,并最终通过构建一个**简易通讯录管理系统**实战项目,来高效掌握这门语言,跨越从语法到工程实践的

dichengyan0013

Linux下C++编程实战:从环境搭建到系统级开发

C++作为一门贴近系统底层的编程语言,其核心价值在于对内存、硬件和操作系统资源的精细控制。理解编译链接原理、内存管理机制和系统调用是掌握C++的关键。在工程实践中,这些知识能帮助开发者构建高性能、高可靠的服务器端、嵌入式及基础设施软件。Linux操作系统以其透明的工具链和“一切皆文件”的哲学,为深入理解这些概念提供了绝佳环境。通过GCC/G++、GDB、Make/CMake等工具,开发者可以完整实践从源代码到可执行文件的构建、调试与优化全流程。本文聚焦于在Linux环境下进行C++系统编程的实战路径,涵盖环

weixin_34008784
评论 2
收藏 已收藏
分享
返回顶部