std::future介绍 在前面几篇文章中基本都用到thread对象,它是C++11中提供异步创建多线程的工具。 但是我们想要从线程中返回异步任务结果,一般需要依靠全局变量;从安全角度看,有些
std::future介绍在前面几篇文章中基本都用到thread对象,它是C++11中提供异步创建多线程的工具。 但是我们想要从线程中返回异步任务结果,一般需要依靠全局变量;从安全角度看,有些不妥;为此C++11提供了std::future类模板,future对象提供访问异步操作结果的机制,很轻松解决从异步任务中返回结果。 在C++标准库中,有两种“期望” 使用两种类型模板实现
这里主要介绍的是唯一期望,std::future类模板定义头文件<future> 其函数声明如下:
对于future补充说明如下:
其成员函数如下: 细节说明wait系列操作其函数声明如下:
当共享状态值是不可以用时,调用wait接口可以一直阻塞,直到共享状态变为"就绪"时,就变为可以用了。 get操作get是获取共享状态的结果它有以下三种形式:
如果我们没有调用wait接口,而是直接掉用get接口,它等价于先调用wait()而后在调用get接口,得到异步操作的结果。 当调用此方法后 valid() 为 false ,共享状态被释放,即future对象释一次性的事件。 时序图按照自己的理解,将std::future对象的使用以及内部逻辑用时序图进行表达,如下: std::future使用下面就用std::future对象来获取异步操作的结果,没有使用到全局变量,逻辑非常清晰 代码如下:
运行结果: |
2022-05-14
2021-11-29
2022-04-04
2022-06-24
2021-11-25