。std::async是C++11标准库中的一个函数,用于实现异步任务的执行。它接受一个可调用对象(函数、函数指针、成员函数指针、lambda表达式等)作为参数,并返回一个std::future对象,用于获取异步任务的结果。
在std::async内部,它会根据系统的资源情况和调用方式,决定是否创建一个新的线程来执行异步任务。如果创建了新线程,那么std::async会将传入的可调用对象封装成一个std::packaged_task,并将其提交给新线程执行。而如果没有创建新线程,std::async会在当前线程中执行可调用对象。
然而,并非所有的std::packaged_tasks都会被执行。这是因为std::async有一个策略参数,用于指定异步任务的执行方式。策略参数有三种取值:std::launch::async、std::launch::deferred和std::launch::any。
因此,当std::async的策略参数为std::launch::deferred时,std::packaged_task并不会立即执行,而是在调用std::future的get()或wait()函数时执行。而当策略参数为std::launch::async或std::launch::any时,std::packaged_task会被提交给新线程或由系统决定是否创建新线程执行。
总结起来,std::async调用内部时,并非所有std::packaged_tasks都会执行,这取决于std::async的策略参数。如果策略参数为std::launch::deferred,std::packaged_task会延迟执行;如果策略参数为std::launch::async或std::launch::any,std::packaged_task会被提交给新线程或由系统决定是否创建新线程执行。
腾讯云相关产品推荐:
领取专属 10元无门槛券
手把手带您无忧上云