C++11之std::future以及async函数、promise类和packaged_task类

Future

std::future是一个类模板。

一个future对象能够从一个提供者(provider)对象或者函数获取一个值,如果在多线程中,可以同步这种访问。

有效的future对象,是指关联了一个共享状态的对象。通过一下方法可以构造一个有效的future对象:

  • async
  • promise::get_future
  • packaged_task::get_future

future对象只有在有效时才可用。默认的构造的future对象不是有效的,除非使用移动构造赋值。

从一个有效的future对象上调用future::get将阻塞调用线程直到提供者(provider)将共享状态(shared state)置为就绪(设定一个值或者设定为异常)。通过这种方式,两个线程中一个线程等待另一个线程设置值来实现同步。

共享状态的生命周期持续到至少到最后一个关联到它的对象释放它或者该对象被析构。因此,关联到某个future对象的共享状态能够比最开始产生该对象的对象(如果有的话)的生命周期要长。

成员函数

构造函数

析构函数

移动赋值运算符

share,得到一个共享的future对象

get,获取值

valid,检查共享状态的有效性

wait,等待共享状态就绪

wait_for,在一段时间内等待共享状态就绪

wait_until,等待共享状态就绪,直到某个时间点

模板特化

两个特化的模板实例

template <class R&> future<R&>;     // specialization : T is a reference type (R&)
template <>         future<void>;   // specialization : T is void 

除了future::get成员函数的返回值不同之外,其他与未特化的模板功能相同。 

类结构

参考

  1. http://www.cplusplus.com/reference/future/future/
  2. C++11 并发指南一(C++11 多线程初探)
  3. C++11中std::future的使用

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值