【C++多线程系列】【九】future与async

如果我们想要异步获取线程处理结果,可以使用future与async。async返回一个future对象,等待线程可以在future对象上获取异步线程的处理值。这里的异步,实际上主线程会阻塞。

 

【一】future的状态

future有三种状态:

std::future_status::deferred;  //表示异步线程还未启动
std::future_status::ready;     //表示异步线程已经执行完毕,并已经将执行结果写入到future中
std::future_status::timeout;   // 表示异步线程处理超时,并没有将结果写入future中

【二】async是否启动线程

async是否启动异步线程,有async第一个参数决定,async接口定义如下:

async(std::launch::async | std::launch::deferred, f, args...)

第一个参数表示异步线程启动的方式,有如下两种方式:

std::launch::async; // 表示表用async函数后,立即启动异步线程
std::launch::deferred; // 表示线程延迟启动,当调用future.get或者future.wait时,才会创建异步线程并启动

而async的默认方式见接口所示:

std::launch::async | std::launch::deferred  // 表示是否启动线程由系统负载决定,如果系统负载过重,则可能不启动异步线程计算,则此时future的状态不会为ready, 一般情况下,这种默认设置够用了,但是如果需要一定以异步线程的方式执行,则显示修改启动方式为async

【三】future的四个方法

future<int> fu;
fu.get();

get声明如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值