news 2026/1/23 11:32:20

每日一个C++知识点|异步编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
每日一个C++知识点|异步编程

上篇文章说到C++多线程的基础知识, 这篇文章主要说C++多线程的另一个重要知识–异步

异步

那么什么是异步呢? 当程序执行一个耗时任务的时候, 主线程硬生生等待线程任务结束,不仅效率低, 还会让程序响应变得卡顿

这时候我们可以使用异步编程来解决这个问题,异步编程的核心就是非阻塞地执行任务,
就是让主线程继续干自己的活, 把耗时任务交给后台去执行, 等任务完成后, 再去去结果, 不需要等待

举个例子:这就像你点外卖,不用站在门口等骑手,而是可以继续工作,等外卖到了再去取, 这就是异步编程的精髓

异步编程的实现

在了解什么是异步编程的核心之后, 我们接下来进一步了解应该怎么实现异步编程呢?
实现异步编程的核心工具主要有三个, 分别是std::async:,std::future:,std::launch::async:

std::async:是异步编程的接口, 可以可以自动管理线程, 不用我们手动创建、销毁线程

std::future:用来获取异步任务结果的工具

std::launch::async:是异步编程的启动策略之一, 作用是强制创建新线程来执行任务, 确保任务是真正异步运行的, 除此之外, 还有std::launch::deferred等策略

下面用一个简单的代码示例来实现异步编程核心工具的用法

#include<iostream>#include<future>// 必须包含的头文件#include<chrono>// 用于时间操作// 定义一个耗时的函数:计算某个数的平方,模拟耗时任务intcalculateSquare(intnum){// 模拟耗时操作(比如复杂计算、网络请求)std::this_thread::sleep_for(std::chrono::seconds(2));returnnum*num;}intmain(){std::cout<<"主线程开始执行~"<<std::endl;// 1. 异步执行任务:强制创建线程执行calculateSquare(5)std::future<int>fut=std::async(std::launch::async,calculateSquare,5);// 2. 主线程可以继续执行其他任务,不会被阻塞std::cout<<"主线程在异步任务执行时,还能干别的事~"<<std::endl;// 3. 获取异步任务的结果(如果任务没完成,这里会阻塞等待)intresult=fut.get();// get()只能调用一次,调用后future就会失效std::cout<<"异步任务结果:5的平方是"<<result<<std::endl;std::cout<<"主线程结束~"<<std::endl;return0;}

运行结果如下:

在整个过程中, 主线任务没有因为异步任务的耗时而阻塞, 这正是多线程异步编程的体现

总结

异步是多线程编程的重要组成部分, 其核心是非阻塞执行任务, 并根据自己需要获取结果, 其中std::async,std::futurestd::launch::async是异步编程中最重要的工具

希望这篇文章能帮大家搞懂 C++ 异步编程的基础用法, 如果觉得内容有用,记得点赞和收藏哦~

感兴趣的朋友可以关注CSDN同名公众号 [ 图形学爱好者Wu ] ~后续将会继续分享更多C++干货

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

探索非线性电液伺服系统:基于ESO的反步滑模控制之旅

非线性电液伺服系统&#xff0c;基于ESO(扩张状态观测器)的反步滑模控制。 pdf教程matlab/simulink源程序。 s—函数搭建 1.通过扩展状态观测器估计速度、加速度和总扰动; 2.根据在线估计的系统模型&#xff0c;设计包含反步控制和滑模控制的控制率&#xff0c;对实际系统进行控…

作者头像 李华
网站建设 2026/1/22 13:53:12

详谈:解释器模式(二)

接上文。看到这个需求&#xff0c;我们很容易想到一种写法&#xff1a;将输入的字符串分割成单个字符&#xff0c;把数字字符通过switch-case转换为数字&#xff0c;再通过计算符判断是加法还是减法&#xff0c;对应做加、减计算&#xff0c;最后返回结果即可。计划的确可行&am…

作者头像 李华
网站建设 2026/1/20 11:20:11

Redis缓存三大问题详解:击穿、穿透与雪崩的解决方案

在使用 Redis 作为缓存层时&#xff0c;我们经常会遇到三个经典问题&#xff1a;缓存击穿、缓存穿透和缓存雪崩。这些问题可能导致系统性能下降甚至崩溃&#xff0c;本文将详细介绍这三个问题的原因和解决方案。一、&#x1f3af; 缓存击穿问题描述&#xff1a;某个热点 key 在…

作者头像 李华
网站建设 2026/1/15 16:36:48

Java赋能AI智能采编:让百万传媒人提早下班的行业变革方案

Java赋能AI智能采编&#xff1a;让百万传媒人提早下班的行业变革方案 在信息爆炸的今天&#xff0c;传媒行业正面临着“素材多到理不清、稿件改到熬大夜、发布急到踩deadline”的普遍困境。数百万传媒从业者坚守在出版、新闻、广播等岗位上&#xff0c;支撑着年产值超2.5万亿元…

作者头像 李华
网站建设 2026/1/16 7:50:47

“蟒蛇书”作者力荐,全球热销的Python入门经典书第3版出版

全新第3版&#xff0c;基于Python 3.13&#xff0c;全球热销75万&#xff0b;&#xff0c;中文版累计销量35万&#xff0c;全书案例素材源代码。零门槛学Python&#xff0c;轻松摆平海量烦琐事务&#xff0c;百万级爆款“蟒蛇书”作者埃里克马瑟斯作序推荐的《Python编程快速上…

作者头像 李华
网站建设 2026/1/14 8:13:12

【开题答辩全过程】以 基于NodeJs的国学诗词网站设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华