C++标准库函数std::async

发布时间 2023-11-27 14:48:46作者: 左边的翼

1、std::async

  std::async是C++11的标准库函数,用于创建执行异步任务并返回std::future对象来获取异步执行的结果状态。该函数最简单的用法如下所示:

#include <iostream>
#include <thread>
#include <future>

std::string promise_string()
{
    for (int i = 0; i < 200; i++)
    {
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
        std::cout << "sleep" << std::endl;
    }

    return __func__;
}

int main()
{
    std::future<std::string> fu = std::async(promise_string);
    system("pause");
}

   以上代码中promise_string函数将在后台与主线程同步执行。

2、std::async的两种执行策略std::launch::async与std::launch::deferred

...
std::future<std::string> fu = std::async(std::launch::async, promise_string);
system("pause");
...
std::future<std::string> fu = std::async(std::launch::deferred, promise_string);
std::cout << fu.get().c_str() << std::endl; system(
"pause");

  策略std::launch::async强制在新线程中执行,但并不保证一定会在新线程中执行异步任务,具体的执行方式取决于实现;策略std::launch::deferred延迟执行,直到调用get()或wait()函数。以上两段代码展示两种策略下异步任务的执行,在std::launch::deferred策略下,不调用fu.get(),异步任务将不会执行。