当前位置: 首页 > news >正文

C++编程指南28 - 使用 std::async() 启动并发任务

一:概述

        与(之前介绍的)避免使用裸指针管理资源类似,我们应该避免直接使用std::thread和std::promise,而是使用std::async 这样的工厂函数来启动并发任务。

   std::async能够自动决定是创建新线程,还是重用已有的线程,从而避免直接管理std::thread带来的复杂性和潜在错误。

二:示例

        1. 推荐使用std::async:

int read_value(const std::string& filename)
{std::ifstream in(filename);in.exceptions(std::ifstream::failbit);int value;in >> value;return value;
}void async_example()
{try {std::future<int> f1 = std::async(read_value, "v1.txt");std::future<int> f2 = std::async(read_value, "v2.txt");std::cout << f1.get() + f2.get() << '\n';} catch (const std::ios_base::failure& fail) {// 处理异常}
}

    使用std::async 有以下几个好处:

     1. 无需管理线程生命周期,std::async 自动处理线程的创建与回收。

     2. 避免std::promise、std::thread 等低级 API,降低错误风险。

     3. 代码更简洁,只需处理std::future,无需管理std::thread 的 join 或 detach 


http://www.mrgr.cn/news/94340.html

相关文章:

  • python多线程和多进程——使用 concurrent.futures.ProcessPoolExecutor 和 ThreadPoolExecutor
  • 解决leetcode第3455题最短匹配子字符串
  • 工具(十二):Java导出MySQL数据库表结构信息到excel
  • 小程序网络大文件缓存方案
  • 用DasViewer的时候3Dtiles 转osgb 可以直接指定目标坐标系吗?
  • 双指针算法专题之——复写零
  • 记录一个SQL自动执行的html页面
  • 求递增子序列LIS的两种方法
  • 深度学习正则化技术之权重衰减法、暂退法(通俗易懂版)
  • LangChain+InternLM2搭建知识库
  • 条款1:理解模版性别推导
  • Kubernetes教程(九)了解卷volume的emptyDir和hostPath
  • 将串口接收到的十六进制数据转为十进制
  • ⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance
  • 【vue + JS】OCR图片识别、文字识别
  • 《基于大数据的营养果蔬推荐系统的设计与实现》开题报告
  • 在 Windows 上快速部署 OpenManus:从安装到运行
  • 计算机网络——DHCP实验
  • python -面试题--算法
  • RGV调度算法(三)--遗传算法