线程池
代码仓库 线程池基础在处理大量并发任务时,传统逐任务创建线程的方式会产生大量线程创建与销毁的系统资源开销,同时增加线程上下文切换的额外损耗,线程池技术正是为缓解这类问题而生。线程池的基础运行逻辑是在系统内部预先创建一定数量的线程,当任务请求传入时,直接从池中调配已就绪线程处理任务;线程完成当前任务后不会被销毁,而是重新回归线程池待命,持续承接后续任务,实现线程的循环复用。 线程池具备多项实用特性,可适配多场景并发任务处理需求:其一为线程复用,通过维护固定数量的就绪线程重复执行任务,规避频繁创建销毁线程带来的资源损耗;其二是并发规模管控,针对多核处理器环境,可限定同时运行的线程数量,避免资源过度占用与线程竞争导致的运行效率下降;其三为任务排队机制,线程全量占用时,新任务会存入任务队列等待,队列可选择有界或无界类型,适配不同调度需求;其四是提升任务响应速度,任务到达后无需等待线程创建,可直接分配执行;其五支持线程状态管理,可设置线程属性、追踪线程运行状态、统计任务执行情况;其六实现系统资源管控,结合线程数量限制与队列机制,负载过高时可按配置调整线程数量,维持系统稳定运行;其七具...
lambda表达式基础
代码仓库shanchuann/CPP-Learninng,进阶内容参见分类: 现代C++之旅 | lambda表达式 Lambda表达式是C++11中引入的常用特性,这类特性最早在C#3.5中落地,Java则是在8版本中才加入对应支持。该特性源自函数式编程理念,也是现代编程语言的常见设计方向,主要为解决传统临时函数对象编写繁琐、代码分散的问题而生。 Lambda表达式具备多项实用优势,采用声明式编程风格,可就地匿名定义目标函数或函数对象,无需额外编写独立的命名函数或函数对象,能以更直接的方式编写程序,兼顾可读性与可维护性。同时写法足够简洁,避免了代码膨胀和功能分散,让开发者更聚焦当前逻辑,也能提升开发效率。此外,它还能在合适的场景实现功能闭包,让程序整体更具灵活性。 基础语法Lambda表达式本质是匿名函数,同时可通过指定规则捕获一定范围内的外部变量,完整语法形式可归纳为:[capture](params) opt->ret{body;};。其中各部分含义清晰,capture为捕获列表,用于控制外部变量的访问规则;params是参数列表,承接函数传入的参数;o...
thread
代码仓库shanchuann/CPP-Learninng 在C++11标准推出之前,C++开发者实现多线程编程只能依赖平台原生API,例如Linux环境下的pthread线程库,此类方式编码流程繁琐、上手门槛较高,且存在平台兼容性问题,跨平台移植难度较大。C++11首次在语言层面引入标准多线程库,通过头文件对底层线程操作进行封装,既简化了多线程开发流程,也保留了Linux线程的底层运行逻辑与内核原理。本文系统梳理C++11 thread的相关概念、实现方法、底层逻辑与使用注意事项,完整覆盖多线程基础与进阶技术内容,适配常规开发与技术学习需求。 基础知识依赖头文件使用C++11标准线程相关功能,需提前包含对应头文件,头文件是线程类、同步工具及相关函数的定义载体,缺失相关头文件会直接引发编译报错,基础多线程开发需包含的核心头文件如下: 12345678#include <iostream>// C++11标准线程核心头文件,封装thread类#include <thread>// 线程同步互斥锁所需头文件#include <mutex>...
weak_ptr
代码仓库shanchuann/CPP-Learninng weak_ptr是C++11标准中专为配合shared_ptr设计的弱引用智能指针,不属于独立的资源管理指针,不具备普通指针的解引用、成员访问能力,核心定位是共享资源的生命周期观测者,而非所有者。其设计的核心目的,就是破解shared_ptr的循环引用难题,同时规避共享场景下的悬空指针非法访问风险,填补shared_ptr共享机制的安全漏洞,是现代C++智能指针体系中不可或缺的配套组件。 底层核心特性 不占用强引用计数:weak_ptr绑定shared_ptr后,仅递增控制块内的弱引用计数,绝对不影响shared_ptr的强引用计数,不会延长托管对象的生命周期,这是破解循环引用的核心原理; 无资源所有权:weak_ptr不负责对象的创建与释放,既不会接管资源,也不会触发析构释放,全程仅观测对象生命周期,不干预shared_ptr的资源管控逻辑; 依赖shared_ptr初始化:weak_ptr无法直接通过new或裸指针初始化,只能通过已有的shared_ptr或其他weak_ptr拷贝、移动初始化,和shar...
shared_ptr
C++11共享所有权智能指针,基于引用计数自动管理内存,彻底解决内存泄漏与悬空指针问题,是STL容器的标准首选。
unique_ptr
代码仓库shanchuann/CPP-Learninng C++11标准依托右值引用、移动语义两大核心语法特性,搭建起一套完备、安全且高效的智能指针体系,彻底解决了传统裸指针在内存管理中的内存泄漏、重复释放、悬空指针等核心痛点,覆盖独占管理、共享管理、循环引用防护等全场景开发需求,是现代C++工程开发中内存管理的标准方案。实际使用时需包含<memory>头文件,整套体系包含三类智能指针,三者各司其职、相互配合,分别适配不同的资源管理逻辑,全面满足日常开发的各类内存管控需求。 unique_ptr是C++11推出的独占所有权型智能指针,专门替代C++98中存在严重设计缺陷的auto_ptr,也是日常开发中独占式资源管理的首选方案。其核心规则为同一时间仅允许一个指针持有资源所有权,安全性与运行效率远超传统裸指针与旧版auto_ptr,从根源规避了独占资源的非法共享问题。 特点 排他所有权模式:两个指针绝对不能指向同一个资源,从根源杜绝重复释放、悬空指针问题; 禁用拷贝语义:不提供拷贝构造函数与左值赋值重载,禁止值拷贝传递,阻断非法共享路径; 支持移动语义:提...
auto_ptr
基础理论内存泄漏内存泄漏是C++程序中动态分配的堆内存,因程序逻辑疏漏未释放或无法释放,导致堆内存持续占用、无法复用的异常现象,长期累积会引发程序运行效率降低、系统资源耗尽乃至程序崩溃等严重后果,是C++内存管理的主要痛点。依据泄漏资源的类型,可将其划分为两类,二者均会对系统稳定性造成不可逆影响。 第一类为堆内存泄漏,也是工程中最常见的泄漏类型,指程序在堆空间申请内存资源后,使用完毕未执行释放操作,导致该块内存被系统标记为占用状态,后续无法被当前程序或其他程序复用,是狭义层面常说的内存泄漏。第二类为资源泄漏,针对操作系统有限的非内存类资源,包括网络套接字、文件描述符、互斥锁、句柄等,这类资源属于系统全局稀缺资源,若创建后未正常归还系统,持续累积会直接耗尽系统资源池,导致后续程序无法申请对应资源,引发系统级功能异常。 裸指针的固有缺陷C++原生裸指针不具备内存自动管理能力,使用过程中存在六大难以规避的底层缺陷,也是智能指针得以提出的重要动因,各类缺陷均会直接引发内存异常或程序未定义行为:其一,无法自主区分指针指向单个对象还是对象数组,易造成内存释放方式选择失误;其二,无法判断指针是...
容器适配器
容器适配器是STL中基于底层容器的接口封装,不独立存储。它通过封装deque等容器,实现了栈、队列和优先队列,屏蔽底层细节,提供便捷操作。
无序容器
代码仓库shanchuann/CPP-Learninng 引言在C++标准模板库(STL)中,关联容器分为有序与无序两大类,无序关联容器依托哈希表实现,主打快速的查找、插入与删除操作,和有序关联容器(map、set)的关键差异在于不维护元素的排序规则,存储顺序由哈希函数决定。这类容器适配大量需要高效存取、不关注元素顺序的业务场景,也是哈希表思想在工程实践中的典型落地应用,和此前讲解的链式哈希底层逻辑高度契合,理解无序容器能更好地串联哈希表理论与STL实际使用。 无序容器基础认知容器分类与底层逻辑STL提供四类无序关联容器,均基于哈希表搭建,依靠哈希函数完成键到存储位置的映射,通过链地址法解决哈希冲突,和手动实现的链式哈希原理完全一致,四类容器分工明确,适配不同存储需求: unordered_map:存储键值对,键唯一不重复,支持键值映射与快速查找 unordered_multimap:存储键值对,键允许重复,适配一对多的映射场景 unordered_set:存储单一元素,元素唯一不重复,主打元素存在性校验 unordered_multiset:存储单一元素,元素允...
链式哈希
代码仓库shanchuann/CPP-Learninng 引言哈希表作为经典的散列类存储数据结构,通过哈希函数完成关键字与存储地址的直接映射,可在平均时间复杂度下实现常数级的查找、插入与删除操作,在分布式缓存、数据库索引、键值存储系统等工程领域具备广泛应用价值。哈希冲突是哈希表设计中不可规避的关键技术问题,链地址法(又称链式哈希)作为解决哈希冲突的主流方案,其主要设计思路为将哈希映射结果一致的关键字以单链表结构串联,使每个哈希桶位对应一条独立链表,以此规避开放寻址法存在的寻址堆积、空间利用率低等缺陷。本文基于标准C语言实现的链式哈希完整源码,系统阐述链式哈希的基础理论原理,对源码的数据结构定义、基础工具函数、操作逻辑、动态扩容机制及内存管理方案进行逐模块、逐流程的详尽解析,同时梳理工程实现中的边界条件处理与性能优化思路,为哈希表的工程化落地与底层原理学习提供完整参考。 链式哈希基础理论哈希表与哈希冲突哈希表依托哈希函数,将输入关键字Key映射至预设范围内的离散哈希地址,实现关键字与存储位置的直接关联,理想状态下可达到O(1)时间复杂度的高效存取。但受哈希函数离散性能...




