自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ape's IT Blog

C/C++/Data Structure/Linux/OS/Internet/MySQL/Docker/Algorithm

  • 博客(536)
  • 收藏
  • 关注

原创 【C++】深入解析日志框架调用链

本文详细描述了日志框架的三种典型调用场景:1)全局根日志器同步输出DEBUG日志,展示从宏调用到最终控制台输出的完整流程;2)创建异步日志器并输出INFO日志,包含异步缓冲处理机制和文件写入过程;3)滚动文件Sink实现日志轮转,包括文件大小检查、新文件创建等关键步骤。每个场景均详细拆解了函数调用链,涵盖日志级别判断、格式化处理、线程安全控制、异步缓冲交换等核心机制,完整呈现了日志框架从日志生成到最终输出的全链路处理流程。

2026-03-17 21:52:41 53

原创 【C++】建造者与代理模式实战解析

本文介绍了两种常用的设计模式:建造者模式和代理模式。建造者模式用于分步创建复杂对象,通过指挥者控制构建流程,实现构建与表示的分离(以电脑配置为例)。代理模式则通过代理对象控制对目标对象的访问,支持权限校验、日志记录等功能(以文件下载为例)。两种模式分别解决了对象创建和访问控制的不同问题,C++代码示例展示了其具体实现方式。

2026-03-17 16:35:20 430

原创 【C++】工厂模式核心区别与应用场景

工厂模式是创建型设计模式的核心,用于解耦对象创建与使用。三种工厂模式的主要区别如下:简单工厂通过参数创建单一产品,灵活性低;工厂方法为每个产品创建独立工厂,扩展性更好;抽象工厂则创建产品族,适合跨平台UI等复杂场景。C++代码示例展示了每种模式的实现方式:简单工厂使用静态方法根据参数实例化对象,工厂方法通过抽象工厂接口和具体工厂类实现,抽象工厂则处理多组相关产品的创建。应用时需根据产品复杂度、扩展需求选择合适的模式。

2026-03-17 16:32:05 309

原创 【C++】高并发内存池架构与设计解析

本文深入解析了一个高并发内存池的三层架构设计,其核心思想是通过ThreadCache(无锁)、CentralCache(桶锁)和PageCache(全局锁)的分层缓存机制,平衡性能与内存碎片问题。关键设计包括:1)SizeClass分类器减少内碎片;2)FreeList高效管理内存块;3)Span结构管理连续物理页;4)PageMap实现快速地址映射。工程实践注重并发优化、碎片治理和跨平台兼容性,通过慢开始算法和批量操作提升性能。该架构在性能、内存利用率和实现复杂度之间取得了巧妙平衡。

2026-03-16 18:55:59 415

原创 【C++】指派初始化器 && std::span && std::for_each

C++20引入指派初始化器(Designated Initializers)解决了聚合类型初始化时的痛点。该特性允许通过.成员名或[下标]直接指定初始化目标,无需依赖声明顺序。主要优势包括:提升代码可读性(明确初始化目标)、减少顺序错误风险、支持部分初始化。适用于结构体/类和数组,但存在严格限制:不能重复初始化、仅限聚合类型、不支持表达式下标等。相比C++17的顺序初始化,该特性使代码更安全直观,同时保持了与C语言的兼容性。

2026-02-14 20:23:38 926

原创 【C++】syncstream:多线程安全输出的终极方案

C++20引入syncstream解决了多线程并发写入标准流的未定义行为问题。传统手动加锁或字符串拼接方案存在性能低、内存开销大和适配性差等缺陷。syncstream通过std::osyncstream封装输出流,将内容缓存至std::syncbuf,在析构或刷新时原子性写入底层流,既保证了输出完整性,又提升了易用性。典型用法是用osyncstream包裹cout,实现线程安全输出,避免字符交错问题。相比临时字符串拼接方案,syncstream无需额外内存分配,更高效且支持动态输出场景。

2026-02-14 20:02:11 921

原创 【C++】jthread样例代码到底层实现到常见QA

本文介绍了C++20中的std::jthread特性及其底层实现原理。jthread是对原生线程的RAII封装,提供自动join和内置停止机制,通过stop_source、stop_token和stop_callback实现线程的优雅终止。文章包含经典使用示例,展示了线程任务的创建、停止请求和回调处理,并通过简化版原理代码解析了共享停止状态、原子操作等核心设计。编译要求C++20支持,运行示例演示了线程从启动到终止的完整生命周期。

2026-02-12 23:00:27 935

原创 【C++】jthread:优雅终止线程新方案

C++20引入jthread和协作中断机制,解决了传统线程管理的三大痛点:1)提供标准化的协作中断机制(stop_token/stop_source),无需手动实现标志位轮询;2)自动管理线程生命周期,析构时自动join避免程序崩溃;3)统一中断接口,支持中断回调(stop_callback)实现资源清理。这些改进显著提升了线程安全性和代码可维护性。

2026-02-12 22:18:45 963

原创 【C++】格式化库:告别繁琐,拥抱高效

C++20引入格式化库(<format>)旨在解决传统格式化方法的痛点。此前,C++开发者主要依赖类型不安全的printf和冗长低效的stringstream。新库提供类型安全、高性能的格式化方案,支持简洁的{}占位符语法、编译期检查、自定义类型扩展和高效输出。核心组件包括:format(基础格式化)、format_to(迭代器输出)、format_to_n(带长度限制)和vformat(底层接口)。该设计对标现代语言如Python的格式化功能,显著提升开发效率和代码安全性。

2026-02-12 18:29:35 681

原创 【C++】三路比较运算符:简化代码新利器

C++20引入三路比较运算符<=>(太空船运算符)主要解决传统比较运算符冗余和易错问题。传统方式需手动重载6个比较运算符,逻辑重复且容易不一致。<=>通过一次比较返回三种可能结果(小于/等于/大于),编译器可自动生成其他比较运算符,大幅简化代码。它支持三种比较类别:强序(完全等价)、弱序(比较维度等价)和偏序(允许不可比情况)。自定义类型可通过=default自动生成比较逻辑,或手动重载实现定制比较规则。这一特性显著提升了代码简洁性和安全性,是C++20的重要现代化改进。

2026-02-12 18:09:45 663

原创 【C++】Ranges 工厂视图与投影机制

本文展示了C++20范围库的实用示例,包括视图生成器和投影机制。主要内容包括:1) 使用iota视图生成无限/有限序列;2) 实现斐波那契数列生成器;3) 通过istream视图处理流数据;4) 文件行读取功能;5) 简化版std::invoke实现原理;6) 投影版max_element算法应用。其中特别演示了如何通过投影机制查找人员列表中年龄最大者,体现了现代C++的简洁性和表达能力。

2026-02-12 16:21:33 1065

原创 【C++】Ranges:彻底改变STL编程方式

C++20 Ranges 全面解析了传统STL算法的痛点并引入现代化解决方案。Ranges通过直接操作容器/序列、惰性求值和链式组合,解决了传统算法需要手动传递迭代器、无法组合操作、性能开销大等问题。核心概念包括Range(可迭代对象)、Iterator和Sentinel,支持编译期安全检查。视图(Views)作为轻量级惰性求值组件,提供过滤、转换、切片等丰富操作,可通过管道运算符|链式调用。示例展示了如何组合多个视图操作序列而不产生中间存储开销,同时保持原始数据不变。Ranges显著提升了C++代码的表达

2026-02-12 16:04:35 784

原创 【C++】模块:告别头文件新时代

C++20引入模块机制旨在解决传统头文件模式的痛点,包括编译效率低、接口与实现不分离、标准库冗余等问题。模块通过二进制接口文件(.ifc)替代文本替换,实现高效编译和封装。核心语法包括export module定义模块、import导入模块以及export导出接口。模块支持分区机制,可将大型模块拆分为多个子文件,通过主接口统一暴露功能。相比头文件,模块显著提升编译速度、增强封装性,是C++代码组织的现代化解决方案。

2026-02-12 15:52:41 865

原创 【C++】概念与约束深度解析

摘要 C++20的Concepts(概念)和Constraints(约束)解决了模板编程中的关键痛点:晦涩的错误提示、不清晰的模板接口以及复杂的SFINAE实现。Concepts通过显式约束模板参数,提供精准的错误提示,简化代码并增强自文档化能力。核心内容包括:概念的定义语法(如requires表达式)、四种约束使用场景(修饰模板参数、requires子句、编译期分支和约束关联函数)、约束类型(简单、合取、析取和表达式约束)以及约束的偏序规则(选择更具体的约束模板)。这些特性显著提升了C++模板的可读性、可

2026-02-12 14:04:02 612

原创 【数据结构】高效掌握并查集:核心原理与实战

并查集是一种高效处理动态连通性问题的数据结构,核心功能包括查找元素所属集合(Find)和合并集合(Union)。通过路径压缩和按秩合并优化,其操作时间复杂度接近常数级。本文详细介绍了并查集的原理、C++实现(含递归/迭代两种路径压缩方式)及典型应用场景(如社交网络分组、最小生成树算法等)。代码实现包含初始化、查找、合并和连通性判断等核心操作,并提供了测试示例。该数据结构广泛应用于需要高效处理分组和连通性问题的算法场景。

2026-02-12 13:34:05 882

原创 【Linux/C++】线程切换与协程切换,协程池

Linux线程切换机制与高并发死锁问题分析 摘要: 本文分为两部分。第一部分详细剖析Linux线程切换机制,指出内核通过轻量级进程(LWP)实现线程,线程切换仅需更换栈和寄存器而无需切换页表,显著降低切换成本。切换触发场景包括主动阻塞、时间片耗尽和中断抢占,最终通过context_switch()完成内核栈切换。第二部分通过实际案例展示高并发环境下线程锁与协程混用导致的死锁问题。当协程调度器在持有线程锁时触发协程切换,同一线程内的不同协程会竞争同一把锁,形成死锁。该案例揭示了并发编程中模型错位的危险性,强调

2026-02-11 17:42:51 644

原创 【C++】std::latch:线程同步新利器

摘要: std::latch是C++20引入的一次性同步屏障,用于线程协调。核心特性包括:一次性计数器递减(不可重置)、线程安全(除析构外所有操作可并发调用)和高效同步。主要方法有count_down()(非阻塞减计数)、wait()(阻塞等待)和arrive_and_wait()(组合操作)。相比mutex+condition_variable,latch抽象层级更高,代码更简洁,适用于固定线程的一次性同步场景(如主线程等待子线程初始化)。其非阻塞操作(如count_down())通过原子操作实现高效同步

2026-02-11 11:00:48 838

原创 【C++】C++20协程的await_transform和coroutine_handle

本文深入解析了C++20协程的核心机制,重点介绍了四个关键组件:std::coroutine_handle作为协程控制器、noop_coroutine空操作协程工具、await_transform等待转换器以及await_suspend挂起控制逻辑。文章通过代码示例展示了它们的具体用法,包括如何通过协程句柄控制协程生命周期、使用noop_coroutine作为安全占位符、利用await_transform拦截和转换等待表达式,以及await_suspend的三种返回值类型如何影响协程行为。最后提供了修正后的

2026-02-10 22:23:12 437

原创 【C++】从实战日志读懂C++20协程:异步操作的优雅实现

本文通过实战代码和详细日志分析C++20协程的工作原理。代码展示了AsyncOperation可等待对象和Task协程任务类型的实现,包含构造、挂起、恢复等关键流程。日志记录了协程从创建到执行的全过程:主线程创建协程后,协程在遇到co_await时会根据await_ready()决定是否挂起,未就绪时通过await_suspend()启动异步线程,完成后调用handle.resume()恢复执行。特别展示了就绪/未就绪两种状态的处理差异,以及协程在不同线程间的切换过程。通过这段带详细线程ID追踪的代码,直观

2026-02-10 17:06:14 877

原创 【C++】异常处理机制全解析

本文深入解析C++异常处理的底层实现机制。主流编译器采用零成本异常处理模型,通过编译期生成异常表(记录try/catch范围和析构信息),在运行时throw触发堆上异常对象创建和栈展开过程。文章详细剖析了try/catch/throw/noexcept等关键字的底层原理:try标记监控域、catch匹配异常类型、throw创建异常对象并触发栈展开,noexcept则作为编译期优化标记。特别指出异常对象生命周期管理、栈展开安全性等关键细节,并对比了新旧异常规范差异。最终强调C++异常通过编译期准备与运行时协作

2026-02-10 15:42:47 626

原创 【C++】从代码到原理:逐层解构C++20协程的promise_type、Awaitable与co_yield核心机制

本文解析了C++20无栈协程的底层实现原理,通过一个生成器示例展示了协程状态管理、暂停/恢复机制和数据传递的核心逻辑。关键点包括: 协程返回类型必须包含promise_type,作为协程状态的载体,负责存储跨暂停点的数据和暂停/恢复策略 编译器会自动创建堆上的协程状态对象,包含promise_type、指令指针和局部变量 协程通过coroutine_handle控制,实现暂停(resume)和恢复(yield_value) 示例Generator类管理协程生命周期,禁用拷贝避免重复销毁 代码展示了协程从初始

2026-02-10 14:39:03 1181

原创 【C++】 co_yield如何成为语法糖?解析其背后的Awaitable展开与协程状态跃迁

本文深入解析C++20无栈协程的核心原理与实现机制。主要内容包括: 无栈协程的底层模型:通过堆上状态对象保存执行状态,实现暂停(suspend)和恢复(resume)机制 协程三要素:返回类型作为控制器、Promise类型存储状态、Awaitable类型控制暂停逻辑 Awaitable类型的设计:通过await_ready()、await_suspend()和await_resume()三个接口实现灵活的暂停/恢复控制 两种Awaitable实现方式:直接实现等待器接口或重载operator co_awai

2026-02-10 14:34:41 874

原创 【C++】栈的变奏:从C++20无栈协程源码出发,透视编译器如何生成状态机

本文详细解析了C++20无栈协程的实现原理,通过一个整数序列生成器的完整示例,展示了协程的核心结构和工作流程。主要内容包括: 关键组件: 协程返回类型Generator及其promise_type 协程句柄coroutine_handle 暂停/恢复控制逻辑 执行流程: 协程创建时在堆上分配状态对象 通过initial_suspend实现延迟执行 使用co_yield暂停并传递值 通过resume()恢复执行 底层机制: 编译器将协程转换为状态机 状态信息序列化到堆内存 通过promise_type管理协程

2026-02-09 22:28:21 794

原创 【C++/Linux】从线程栈到协程栈:程序执行流底层布局与切换机制全景解析

本文系统梳理了Linux线程与协程的核心问题:1)线程创建通过pthread库完成,本质是共享资源的轻量级进程;2)主线程栈位于进程栈区,子线程栈在内存映射区动态分配;3)协程栈位于堆/内存映射区,有栈协程拥有独立动态栈,无栈协程仅依赖堆上状态对象;4)有栈协程支持完整上下文切换和嵌套暂停,无栈协程轻量但受限;5)无栈协程需编译器支持函数拆分和状态序列化,而有栈协程仅需运行时管理。二者设计差异源于对轻量性和灵活性的不同权衡。

2026-02-09 17:11:23 1840

原创 【C++】string_view:高效字符串处理指南

C++17引入的string_view是一种高效处理只读字符串的工具,通过保存字符串起始地址和长度实现零拷贝访问,避免了const std::string&的隐式构造和const char*的长度计算问题。主要适用于函数参数传递、字符串切片操作和容器存储只读引用等场景。使用时需特别注意:原字符串生命周期必须长于string_view、不保证以'\0'结尾、不可修改字符串内容,且拷贝是浅拷贝。核心原则是仅用于只读访问,不管理内存生命周期。

2026-02-08 18:44:17 770

原创 【C++】类型转换:operator int核心用法详解

本文介绍了C++中的operator int转换运算符重载,详细讲解了其语法定义、基本用法和实际应用场景。主要内容包括:转换运算符的基本语法格式,通过MyNumber类示例演示隐式和显式转换的实现;关键用法如explicit修饰符的作用;常见应用场景如包装类类型还原、旧代码兼容和数学类适配;以及使用时的注意事项。文章强调转换运算符是C++类型转换的核心知识点,合理使用可以增强代码灵活性,但需避免过度使用导致逻辑模糊。

2026-02-08 13:29:38 944

原创 【C++】std::any与std::variant的深度对比

C++中std::variant与std::any的核心区别与使用场景 std::variant和std::any都是C++17引入的多类型容器,但存在本质差异: 核心区别: std::variant是类型安全的联合体,需预先声明所有可能类型(编译期确定),栈分配内存,性能高 std::any采用类型擦除技术,可存储任意类型(运行时确定),通常堆分配,灵活性高但性能略低 使用场景: std::variant适用于类型明确且固定的场景,如协议解析、状态机、替代裸union std::any适用于类型不确定场景

2026-02-08 13:10:20 673

原创 【C++】std::variant:安全高效的union替代方案

C++17引入的std::variant是对传统union的类型安全升级。union作为原生共用体,所有成员共享内存但缺乏类型安全,需手动管理生命周期,仅适用于底层开发。std::variant通过自动类型追踪和生命周期管理,支持任意可拷贝类型,内置丰富接口确保运行期安全,可直接用于容器和现代C++特性。两者核心区别在于类型安全和自动化程度:union适合极致性能场景,而variant适用于绝大多数需要多类型处理的业务逻辑。variant额外内存开销极小(仅类型标签),推荐优先使用,除非有严格的底层或性能要

2026-02-06 16:38:47 934

原创 【C++】inline变量:全局共享新利器

C++17引入的inline变量特性解决了传统全局/静态变量的重复定义问题,允许在头文件中直接定义变量而不会引发链接冲突。其核心价值包括:支持类静态成员变量在头文件内声明+定义+初始化、保证变量全局唯一性、与inline函数理念一致。inline变量适用于头文件全局常量、类静态成员、跨文件共享状态变量以及纯头文件库开发等场景,显著简化代码结构。使用时需注意初始化一致性,避免滥用全局变量,同时constexpr变量已隐式inline无需重复修饰。该特性使C++变量管理更加灵活高效。

2026-02-05 22:18:47 732

原创 【C++】引用类型全解析:左值、右值与万能引用

本文详细解析了C++中的五种引用类型:左值引用、const左值引用、右值引用、const右值引用和万能引用。左值引用绑定可修改的左值,const左值引用更灵活可绑定右值并延长其生命周期。右值引用(C++11引入)专用于绑定右值,实现移动语义和完美转发。const右值引用语法合法但实用价值低。万能引用通过类型推导自动适配左值或右值,是实现完美转发的关键。文章从定义、语法、特性、使用场景和注意事项五个维度进行深入剖析,帮助开发者精准掌握各类引用的使用方式。

2026-02-05 22:05:04 878

原创 【C++】深入解析list迭代器:三参数与五嵌套类型

本文深入解析了STL中list迭代器的三个模板参数(T, Ref, Ptr)和五个嵌套类型的核心设计。通过源码分析,揭示了三个模板参数如何实现普通/const迭代器的复用:T确定元素原始类型,Ref控制解引用权限,Ptr管理指针访问。对比其他实现方案,三参数设计避免了代码冗余,满足const正确性要求。同时,五个嵌套类型(iterator_category、value_type等)确保了迭代器与STL泛型算法的兼容性。这种设计体现了STL"封装底层细节,暴露简洁接口"的核心理念,是泛型编

2026-02-05 11:16:51 787

原创 【C++】STL类型萃取:迭代器高效实现揭秘

文章摘要: STL中的类型萃取技术通过模板特化在编译期提取类型属性,为泛型算法提供最优实现。本文剖析了迭代器萃取(iterator_traits)的核心原理,包含完整可运行代码,演示了如何通过类型标签和模板特化实现高效的距离计算(distance函数)。代码展示了主模板、指针特化版本、两种距离计算重载(O(n)和O(1)),以及vector容器如何利用类型萃取优化构造过程。测试案例验证了该技术对string迭代器(双向)和随机访问迭代器的适配能力,体现了泛型编程与运行效率的统一。(149字)

2026-02-05 11:16:43 793

原创 【C++】模板偏特化与std::move深度解析

本文整合C++模板偏特化与std::move两大核心知识点。在模板偏特化部分,通过is_same和remove_const案例解析了偏特化的匹配规则与实现逻辑,包括类型判断和修改的原理。std::move部分阐述了其作为移动语义触发器的核心作用,通过无条件类型转换实现资源高效转移,并分析了其无运行时开销的底层实现。这两项技术共同构成了C++模板元编程和移动语义的基础,对性能优化和类型操作至关重要。

2026-02-04 18:07:46 995

原创 【C++】揭秘tuple底层实现原理

C++的std::tuple是一个类型安全的异构容器,通过模板递归偏特化实现元素存储。其核心机制是将多元素拆解为"首元素+子tuple"的递归结构,最终以空tuple特化终止递归。tuple采用嵌套继承的聚合存储方式,元素按参数顺序分层存放。访问元素时,std::get<N>利用编译期索引和模板推导实现类型安全访问。标准库还提供tuple_size和tuple_element辅助模板来获取元信息。所有操作均在编译期完成,保证运行时零开销。C++17引入折叠表达式进一步优化了实

2026-02-04 17:03:50 604

原创 【C++】constexpr动态内存与双模式革命

摘要: constexpr是C++用于编译期计算的关键字,其演进从C++11到C++20逐步放宽限制。C++11引入基础功能但限制严格,仅支持单行表达式;C++14允许多语句和流程控制;C++17增加类支持、编译期条件分支;C++20实现突破性升级,支持动态内存分配和异常处理,使编译期与运行时代码几乎完全兼容。这一演进使constexpr从受限的编译期专用语法发展为功能完备的双模式编程工具。

2026-02-04 17:00:29 1095

原创 【C++】线程安全一次性执行机制揭秘

摘要:C++11引入的std::call_once和std::once_flag提供线程安全的一次性执行机制,确保函数在多线程环境下仅执行一次。std::once_flag作为状态标记,std::call_once根据状态控制执行,无需手动加锁。底层通过原子操作和系统同步原语实现高效无锁设计,支持异常安全处理。典型应用包括单例模式和全局资源初始化,比传统双重检查加锁更简洁安全。使用时需保证once_flag对象在多线程间共享,头文件为<mutex>。

2026-02-04 10:24:53 628

原创 【C++】future库核心组件深度解析

本文解析了C++11 <future> 库的核心辅助组件,包括错误分类、状态枚举和启动策略。主要内容: std::future_category():用于标识future相关错误,全局唯一且无异常抛出,可精准判断异常来源。 std::future_status:定时等待操作的返回状态枚举,包含ready/timeout/deferred三种状态,支持非阻塞等待和超时处理。 std::launch:控制std::async任务启动策略的位掩码枚举,支持async/deferred两种基础模式及其组

2026-02-04 09:38:55 820

原创 【C++】异步编程:std::async终极指南

摘要:std::async是C++11引入的异步编程工具,封装了std::packaged_task和std::thread的复杂逻辑,简化异步开发。核心特性包括: 支持多种启动策略(异步执行、延迟执行或自动选择) 自动管理线程生命周期和共享状态 通过std::future获取执行结果或异常 参数采用衰减拷贝,引用参数需用std::ref包装 默认策略不确定,建议显式指定launch::async确保异步执行 不可丢弃返回值,否则会导致主线程阻塞

2026-02-04 09:33:42 708

原创 【C++】std::promise原理与实战解析

摘要:std::promise是C++11提供的异步结果提供者,与std::future配合实现线程间结果传递。其核心机制是通过共享状态(线程安全的堆对象)进行通信,包含值/异常存储区和状态标志。promise生产结果(set_value()/set_exception()),future消费结果(get())。支持普通类型、引用特化和void特化三种模板形式,具有不可拷贝、线程安全、结果唯一性等特点,典型应用于生产者-消费者模型的跨线程数据同步。 (字数:150字)

2026-02-04 09:24:02 823

原创 【C++】异步编程利器:std::future深度解析

std::future是C++11引入的异步编程核心工具,作为异步操作结果的"未来获取器"。它通过共享状态机制实现线程间同步,提供三种模板特化适配不同返回类型。核心特性包括独占所有权、线程安全操作和强制同步机制。future的有效构造只能通过std::async、std::promise或std::packaged_task实现。底层基于共享状态这一线程安全控制块,使用条件变量实现阻塞唤醒机制。典型应用场景包括异步任务执行、线程间通信等,通过get()、wait()等成员函数实现结果获取

2026-02-04 09:23:53 849

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除