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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40666620/article/details/102702521

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

猜你喜欢

转载自blog.csdn.net/qq_40666620/article/details/102702521