以下内容整理自:https://www.cnblogs.com/my_life/articles/5401190.html

future 是一个能从其他地方获取到一个值的对象,如果是在不同的线程中,则被synchronizing properly.

std::condition_variable 可以用于异步事件的重复通知,但是有些时候可能只等待事件发生一次,比如:等待特定的航班,用条件变量大杀器有点浪费了。C++11 标准库提供了几种异步任务机制。通常 thread 不能返回线程执行的结果(可以通过引用参数返回),而在异步处理当中很多时候都需要获得计算的结果。如果只获取结果一次那么选用 future,即通过 future 获取了结果后,后续再通过此 future 获取结果将会出错。

future,async,packaged_task,promise 用法简介:

  std::future可用于异步任务中获取任务结果,但是它只是获取结果而已,真正的异步调用需要配合 std::async, std::promise, std::packaged_task。这里 async 是个模板函数,promise 和 packaged_task 是模板类,通常模板实例化参数是任务函数(callable object)。下面是它们的部分组合用法:假设计算任务 int task(string x);

1. async + future简单用法:

代码:

 1 // future::operator=
 2 #include <iostream>       // std::cout
 3 #include <future>         // std::async, std::future
 4 
 5 int get_value() { return 10; }
 6 
 7 int main ()
 8 {
 9   std::future<int> fut;           // default-constructed, 默认构造的 future 对象是无效的
10 
11 // async()返回的就是一个 uture 对象。 fut = future_returned_by_async(), 调用 future 的赋值运算符。
12 // move-assigned,赋值运算符隐式使用的是 move 语意(非c++98的拷贝语意), fut = 这使得 fut 变的有效。同时使得右操作数变的无效
13  fut = std::async (get_value);  
14  //async创建并运行一个线程,返回一个与函数返回值相对应类型的 future,通过它我们可以在其他任何地方获取异步结果
15 
16  //Calling future::get on a valid future blocks the thread until the provider makes the shared state ready return 0;
17  std::cout << "value: " << fut.get() << '\n';  
18 }
View Code

相关文章: