C++多线程高并发,thread()和async()的区别

std::thread有可能计算机资源紧张,执行失败,而std::async(std::launch::async,mehtodName)强制创建一个线程
但是我们一般不叫std::async()创建线程,而是创建一个异步任务,有的时候async并不创建新的线程

  • 1)如果用std::launch::deferred,延迟调用,使用get时进行,但是没有创建新的线程
  • 2)如果用std::launch::async,创建新的线程
  • 3)如果用std::launch::async | std::launch::defferred,系统自行决定使用哪一种
  • 4)如果不适用额外的参数,效果默认为3),系统自行决定

一个程序里一般不能超过100~200个线程

问题:

怎么解决std::future myFuture = std::async(threadEntryFunc2),这种写法到底有没有推迟执行呢?
使用future的wait_for函数,等待0秒,返回一个std::future_status对象, 即可根据对象的参数判断执行的情况,详细解释,如下连接
C++多线程高并发 future_status,std::shared_future(std::future只能get一次的问题)

std::future_status<int> myStatus = myFuture.wait_for(std::chrono::milesconds(0));
//可以通过status判断,
std::future_status::deferred,future_status::timeout,future_status::ready
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值