当前位置: 首页 > 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 

相关文章:

  • 【二分查找 寻找首端】P3718 [AHOI2017初中组] alter|普及+
  • JVM之工具篇
  • 宇树人形机器人开源模型
  • socket编程与TCP协议
  • 前端面试:富文本里面, 是如何做到划词的?
  • kotlin中的模块化结构组件
  • Pytorch中矩阵乘法使用及案例
  • 【21】单片机编程核心技巧:if语句逻辑与真假判断
  • HCIA-12.ACL原理与配置
  • 分治算法区
  • Linux云计算SRE-第二十周
  • ARTKIT 开源程序是由 BCG X 开发的 Python 框架,用于自动对 Gen AI 应用程序进行基于提示的测试和评估。
  • 聊一聊binder传递文件fd原理及新版本性能优化
  • 【QT】事件系统入门——QEvent 基础与示例
  • NandFlash 坏块检测工具记录
  • 高频面试题(含笔试高频算法整理)基本总结回顾41
  • 字符最大间隔排列
  • C++程序员职业规划
  • MySQL与Redis的缓存一致性问题
  • python-leetcode-删除链表的倒数第 N 个结点
  • 阿根廷发生5.6级地震,震源深度30公里
  • 4月一二线城市新房价格环比上涨,沪杭涨幅居百城前列
  • 长三角铁路今日预计发送旅客420万人次,有望创单日客发量新高
  • 体坛联播|欧冠巴萨3比3战平国米,柯洁未进入国家集训队
  • 内蒙古公开宣判144件毁林毁草刑案,单起非法占用林地逾250亩
  • 水利部将联合最高检开展黄河流域水生态保护专项行动