Skip to Content
C++语言导学(原书第2版)
book

C++语言导学(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
Pearson
Content preview from C++语言导学(原书第2版)

15.7.2 packaged_task

我们应该如何向一个需要结果的任务引入future呢?又如何向一个生成结果的线程引入对应的promise呢?标准库提供了packaged_task类型去简化将任务连接到future和promise的设置。一个packaged_task提供了一层包装代码,实现将某个任务的返回值或异常放入一个promise中(就像15.7.1节中代码所做的)。如果你通过调用get_future()来获取结果,packaged_task会返回给你对应其promise的future。例如,我们可以将两个任务连接起来,它们分别使用标准库accumulate()(参见14.3节)算法将一个vector<double>中的一半元素累加起来:

packaged_task模板接受模板参数表示任务的类型(本例中为Task_type,double(double*,double*,double)的别名),并接受构造函数参数作为任务(本例中为accum)。move()操作是必需的,因为packaged_task不能被拷贝。原因在于packaged_task是一种资源句柄:它拥有一个promise且(间接)负责其任务所拥有的资源。

请注意这段代码没有显式使用锁:通过使用packaged_task,我们可以集中精力于要完成的任务,而不必操心用来管理它们通信的机制。两个任务运行于两个独立的线程上,因此可以并行执行。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

软件开发实践:项目驱动式的Java开发指南

软件开发实践:项目驱动式的Java开发指南

Raoul-Gabriel Urma, Richard Warburton
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Python机器学习案例精解

Python机器学习案例精解

Posts & Telecom Press, Yuxi (Hayden) Liu

Publisher Resources

ISBN: 9787111633280