std::async
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <future> 中定义
|
||
template< class Function, class... Args> std::future<typename std::result_of<Function(Args...)>::type> |
(1) | (C++11 起) |
template< class Function, class... Args > std::future<typename std::result_of<Function(Args...)>::type> |
(2) | (C++11 起) |
。模板功能
1) async
f
异步运行的功能(可能在一个单独的线程),并返回一个std::future,最终将持有该函数调用的结果.原文:
The template function
async
runs the function f
asynchronously (potentially in a separate thread) and returns a std::future that will eventually hold the result of that function call.。的行为一样async(std::launch::async | std::launch::deferred, f, args...)。换句话说,
2) f
可以开始在一个新的线程,或者它也可以同步运行的一个值被查询时,所得到的std::future.原文:
Behaves the same as async(std::launch::async | std::launch::deferred, f, args...). In other words,
f
may be started in a new thread or it may be run synchronously when the resulting std::future is queried for a value.。带参数的调用一个函数
f
args
根据具体的上市政策policy
。 原文:
Calls a function
f
with arguments args
according to a specific launch policy policy
: - 。如果“异步”标志的设置(即policy & std::launch::async != 0),然后
async
产生一个新的线程执行,如果由std::thread(f, args...),但如果功能f
返回一个值或抛出一个异常,它被存储在共享状态访问通过std::futureasync
返回给调用者.原文:If the async flag is set (i.e. policy & std::launch::async != 0), thenasync
spawns a new thread of execution as if by std::thread(f, args...), except that if the functionf
returns a value or throws an exception, it is stored in the shared state accessible through the std::future thatasync
returns to the caller.
- 。如果“递延”标志(即policy & std::launch::deferred != 0),然后
async
皈依args...
相同的方式std::thread构造函数,但不会产生一个新的线程执行。相反,“懒惰的评价”:在第一次调用一个不定时等功能的std::futureasync
返回给调用者会导致f(args...)
在当前线程中执行。所有其他的访问相同的std::future将立即返回结果.原文:If the deferred flag is set (i.e. policy & std::launch::deferred != 0), thenasync
convertsargs...
the same way as by std::thread constructor, but does not spawn a new thread of execution. Instead, lazy evaluation is performed: the first call to a non-timed wait function on the std::future thatasync
returned to the caller will causef(args...)
to be executed in the current thread. All further accesses to the same std::future will return the result immediately.
- 。 std::launch::async和std::launch::deferred标志设置在
policy
,它的实施是否执行异步执行或懒惰的评价.原文:If both the std::launch::async and std::launch::deferred flags are set inpolicy
, it is up to the implementation whether to perform asynchronous execution or lazy evaluation.
目录 |
[编辑] 。参数。
f | - | 。到调用函数或函数对象。
| ||||||||||||||||||||||||
args... | - | 。参数传递给
f 。 | ||||||||||||||||||||||||
policy | - | 。位掩码值,其中个别的位控制在允许的执行方法
原文: bitmask value, where individual bits control the allowed methods of execution
|
===。 返回值。===
。 std::future指的是该函数的返回值.
原文:
std::future referring to the return value of the function.
[编辑] 。例外。
。抛出std::system_error如果发射的政策是std::errc::resource_unavailable_try_again和实施是无法启动一个新线程的错误条件std::launch::async.
原文:
Throws std::system_error with error condition std::errc::resource_unavailable_try_again if the launch policy is std::launch::async and the implementation is unable to start a new thread.
[编辑] 。注释。
。使额外的(实现定义的)位在默认启动的政策的实施可能会延长std::async第一个重载的行为.
原文:
The implementation may extend the behavior of the first overload of std::async by enabling additional (implementation-defined) bits in the default launch policy.
[编辑] 。为例。
#include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <future> template <typename RAIter> int parallel_sum(RAIter beg, RAIter end) { typename RAIter::difference_type len = end-beg; if(len < 1000) return std::accumulate(beg, end, 0); RAIter mid = beg + len/2; auto handle = std::async(std::launch::async, parallel_sum<RAIter>, mid, end); int sum = parallel_sum(beg, mid); return sum + handle.get(); } int main() { std::vector<int> v(10000, 1); std::cout << "The sum is " << parallel_sum(v.begin(), v.end()) << '\n'; }
输出:
The sum is 10000