并发高层接口:async和future

async

async是一个辅助函数,它以同步或异步的方式执行一个函数,具体方式由发射策略决定

future async(std::launch::async, F func, args…)

async尝试启动一个线程,以异步的方式执行func,args是func的实参。
如果启动线程失败,抛出std::system_error异常,错误码为std::errc::resource_unavailable_try_again。

future async(std::launch::deferred, F func, args…)

以返回的future对象调用get()或wait()时,以同步的方式调用func函数,args是func的实参。

future async(F func, args…)

如果可以,则启动一个线程以异步方式执行func;否则,直到以返回的future对象调用get()或wait()时以同步方式执行func()。

future

future用于读取一个操作的返回值或异常(shared state)。

支持的操作
操作作用
future f默认构造函数,构建一个无效future对象
future f(rv)移动构造函数,会使rv无效
~future()析构函数
f = rv移动赋值操作符,会使rv无效
f.valid()判断future对象是否有效,有效的future对象才可以调用下面的函数
f.get()阻塞直到异步执行的函数返回或抛出异常;或者以同步方式执行函数。get函数返回后,future对象失效
f.wait()和get()类似,但不会令future对象失效
f.wait_for(dur)阻塞一段时间或直到异步执行完成,不会以同步方式启动函数。
f.wait_until(tp)阻塞到特定时间点或直到异步执行完成,不会以同步方式启动函数
f.share()创建一个和f具有相同状态的shared_future对象,令f失效
~future()

如果future对象是shared state的最后所有者,且其相关的操作已经启动但未结束,那么调用其析构函数时会被阻塞,直到操作完成。

wait_for和wait_until返回结果

1、std::future_status::deferred
如果async()以std::launch::deferred延缓了操作且还没被执行,wait_for()和wait_until()会立即返回。

2、std::future_status::timeout
异步启动的操作未完成,且等待超时。

3、std::future_status::ready
操作已完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值