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成员函数的返回值不同之外,其他与未特化的模板功能相同。
类结构
参考