C++11并行编程:Promise与Future解析

需积分: 0 0 下载量 104 浏览量 更新于2024-09-02 收藏 34KB DOCX 举报
"C++11 引入了对并行程序设计的支持,特别是基于任务的并行性,通过异步函数、future 和 promise 实现。并行编程的主要目标是将程序拆分成可独立执行的任务,形成有向无环图(DAG),允许任务并行执行,同时处理依赖关系。C++11 的线程库提供了创建线程的能力,但程序员需要显式管理线程的生命周期,如使用 std::thread 创建和 join 线程。然而,这种方式可能导致复杂的错误处理和线程管理问题。 C++11 的 std::async 是一种任务抽象,它隐藏了线程管理和调度的复杂性。程序员可以使用 std::async 来启动一个异步任务,它会在后台线程中执行,而主线程可以继续执行其他任务。当需要获取异步任务的结果时,可以调用 std::future 的 get 方法。这种方式更便于实现高性能并行计算,因为它自动处理线程数量、负载均衡和错误处理等问题。 并行编程的一个挑战是确定合适的线程数量。创建过多线程可能导致资源浪费和性能下降,而线程过少则无法充分利用多核处理器的优势。通过任务抽象,如 TBB(英特尔线程构建模块),可以更高效地解决这个问题。TBB 提供了一种方式来定义任务和任务之间的依赖,它会根据系统资源自动调整线程数量和任务调度,使得程序员能专注于任务逻辑而不是底层的线程管理。 在 Fedora 中,TBB 是一个强大的工具,可以用来实现高效并行计算。例如,计算一个大数组的和,可以使用 TBB 的 parallel_for 循环,它将循环体分解为多个小任务,自动在多线程间分配,从而加速计算过程。TBB 还提供了其他的并行算法和数据结构,如 concurrent_queue 和 parallel_pipeline,这些工具进一步简化了并行编程。 C++11 的并行编程特性,尤其是 std::async 和 std::future,以及第三方库如 TBB,为开发者提供了强大且易于使用的工具,帮助他们实现基于任务的并行计算,提高程序的执行效率,同时减轻了手动管理线程的负担。"
2020-05-30 上传
pos机驱动,医保,刷卡,landi E820驱动安装,windows xp,7,10系统驱动32位、64位, 联迪系列产品驱动软件 2019/08/30 landi_win_drivers_v3.0.1 1.解决WIN10数据签名的问题 2.加入M56 2G OPEN的驱动 3.加入Q5 PRO RK平台的设备 4.加入安装出错时启用修复功能 5.加入多种安装与卸载等功能(功能未公开) 2019/06/19 landi_win_drivers_v2.8.24 修改VID为56F0(涉及到的设备有:U3)的串口驱动会蓝屏的问题 2019/04/30 landi_win_drivers_v2.8.23.exe 加入A8BASE的驱动 2019/03/26 landi_win_drivers_v2.8.22.exe 修改英文提示文字 2019/03/19 landi_win_drivers_v2.8.21.exe CDC驱动重新生成CAT文件 2019/03/15 landi_win_drivers_v2.8.20.exe 重签名 2019/02/20 landi_win_drivers_v2.8.19.exe 1.加入S180 2.修改M37的CDC驱动(DIAG->CDC) 2018/12/25 landi_win_drivers_v2.8.18_Build20181225 1.加入去MTP的C9,C10,C7 LITE,C8 LITE,C150,C151驱动 2.更新BOO5(QM90)的CDC驱动(DIAG->CDC) 2018/12/20 landi_win_drivers_v2.8.18_Build20181220 1.修改BOO5(QM90) BULK驱动打!号的问题 2018/12/12 landi_win_drivers_v2.8.18_Build20181212 1.加入B005(QM90)的支持 2018/11/27 landi_win_drivers_v2.8.18_Build20181127 1.加入M37的支持 2018/11/19 landi_win_drivers_v2.8.17_Build20181119.exe 1.加入QM30的驱动DIAG驱动ID(5661&MI_01) 2018/11/05 landi_win_drivers_v2.8.17_Build20181105.exe 1.中英文版本合并 2.加入C7 LITE USB驱动 3.修改搜索硬件ID找不到的问题 2018/10/15 landi_win_drivers_v2.8.16_CN_Build20181015.exe 修改BULK没有签名的问题 2018/10/10 landi_win_drivers_v2.8.16_CN_Build20181010.exe 修改C7硬件ID的调整 2018/09/25 landi_win_drivers_v2.8.16_CN_Build20180925.exe 1.加入C7,C150,M7N3(RT1050)设备驱动支持 2.在配置文件中写定中英文版本信息 2018/08/10 landi_win_drivers_v2.8.15_Build20180810.exe 1.修改M7N2(RT1050)安装打!号的问题 2018/08/07 landi_win_drivers_v2.8.15_Build20180807.exe 1.修改APOS烧片和正常驱动的整合 2.加入M7N2(RT1050)设备Vid : 0x26f1 Pid: 0x5672 2018/07/17 landi_win_drivers_v2.8.14_Build20180717.exe 1.解决BULK无法通信的问题 2018/07/02 landi_win_drivers_v2.8.14_Build20180702.exe 1.修改英文版繁体显示个别乱码的问题 2.不对驱动加入标识码 3.对5650的设备对MI00接口支持不好的问题 4.修改BULK驱动在QM30、50下会打!号的问题(第二次枚举时由于电源策略失败导致), 上次提交文件错误 5.取消自动更新的功能 2018/05/11 Setup_Landi_Win_Drivers.exe(此版本是在线安装包版本,如果没有网络,请先用landi_win_drivers_v2.8.14_Build20180516.exe的版本) landi_win_drivers_v2.8.14_Build20180516.exe 1.修改BULK驱动在第二次枚举时出现打!号的问题 2.驱动支持自动更新 3.修改驱动重复安装的问题 4.提交安装包 2018/04/23 landi_win_drivers_v2.8.13_ENG_Build20180327 更新英文版本与现有的中文版本一致 2018/03/27 landi_win_drivers_v2.8.13_Build20180327.exe 1.去掉MI_00接口的问题(在很多电脑会出现问题,建议在INF文件中两个都加进去) 2.加入C059(2G-OPEN)的驱动 3.修改安装程序支持中间SLEEP的设置,在安装过程中多次(其实2次就够了)安装,因为有的驱动安装要必须有先后顺序(比如:C059) 2018/03/14 landi_win_drivers_v2.8.12_Build2018031402.exe 1.更新波普的驱动 2.解决驱动签名过期的问题 3.修改提示文字 2018/02/09 landi_win_drivers_v2.8.12_Build20180209 1.增加波普驱动 2018/02/05 landi_win_drivers_v2.8.11_Build20180205 1.增加C5的硬件ID 2018/02/02 landi_win_drivers_v2.8.10_Build20180202 1.增加R1050设备的硬件ID 2.修改安装程序在个别WIN732位电脑上崩溃的问题 2018/01/05 landi_win_drivers_v2.8.9_Build20180105.exe 1.修改epaydl的硬件ID配置错误的问题 2017/12/12 landi_win_drivers_v2.8.9_Build20180102.exe 1.修改TIS调用规则 2.加入拉卡拉的驱动支持 3.加入C9的驱动支持 2017/12/04 landi_win_drivers_v2.8.8_Build20171204.exe 1.烧片驱动与联迪正常使用的驱动合并成一个安装程序 2017/11/17 landi_win_drivers_v2.8.7_Build20171117.exe 1.修改安装程序的结构 2.修改M模式安装选择有问题的BUG 2017/11/15 landi_win_drivers_v2.7.7_Build20171115.exe 1.加入QM50,QM30设备ID 2017/11/09 landi_win_drivers_v2.7.6_Build20171109.exe 1.修改在WIN7下人别PC会识别不了USB硬件ID接定简写的问题(添加&M_00) 2017/11/06 landi_win_drivers_v2.7.5_Build20171106.exe 1.加入搜索未安装的联迪驱动,如果存在未安装的驱动,程序会自动进行安装 2.中英文版本合并 2017/10/13 Landi_win_drivers_v2.7.4_ENG_Build20171013.exe 升级最新的英文版驱动安装包(与最新版2.7.4中文版同步) 2017/08/22 landi_win_drivers_v2.7.4_Build20170822.exe 1.分离出烧片驱动 2017/08/14 landi_win_drivers_v2.7.3_Build20170814.exe 1.修改界面上没有Q30、Q20选项 2017/08/10 landi_win_drivers_v2.7.2_Build20170810.exe 1.加入Q30USB的PIDVID 2.加入M35S蓝牙适配器PIDVID 2017/08/07 更新英文版与中文版为同一版本 2017/07/31 landi_win_drivers_v2.7.1_Build20170731 1.修改签名的问题 2.加入E5的复合设备PIDVID 2017/06/09 landi_win_drivers_v2.7_Build20170609 1.加入遗漏的APOS A8的PIDVID 2.修改会误卸载程序的问题 2017/06/01 landi_win_drivers_v2.7_Build20170601 1.安装程序INSTALL.EXE显示中英文字符跟随系统版本 2.修改驱动文件 的布局 3.加入VID_26F1&PID_565E的设备ID 2017/04/11 landi_win_drivers_v2.6_Build20170411 增加文档“APOS接电脑设备管理器只枚举出便携设备(MTP)的解决方法.docx” 2017/04/01 landi_win_drivers_v2.6_Build20170401 1、driverinf.ini里MTP部分序号错误,改正;2、MTP的inf里有一个id重复了,改正; 2017/03/17 landi_win_drivers_v2.5_Build20170317 1、合并8953新增的id;2、apos去除usbser驱动,改成diag驱动; 2017/03/02 landi_win_drivers_v2.4_Build20170302 在exe自动安装界面增加E350S 2017/02/23 landi_win_drivers_v2.3_Build20170223 usb2uart增加E350S、联迪自研一维扫描枪BR100-B01(CDC+U盘)、联迪自研二维扫描枪BR200-B01(CDC+U盘)、U3座机(单CDC)、工装特殊设备(单CDC); bulk增加E350S;