当前位置: 首页 > 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 个结点
  • 上海市政府常务会议研究抓好稳就业稳企业稳市场稳预期工作,让企业感受温度
  • 党旗下的青春|83岁仍在“下生活”,他说生活是创作的源泉
  • 讲座|现代女性在面对生育、事业与家庭之间的复杂抉择
  • 巴印在克什米尔发生交火
  • 美银证券前董事总经理胡霁光履新,任摩根士丹利中国区副主席
  • 北京顺义:做好潮白河大桥事故善后处置,举一反三排查风险