C++11多线程------std::async
std::async
可以认为是封装了一个std::promise
,该函数返回一个std::future
,用于获取其他线程的数据。
一般有两种模式:
-
std::lanch::async
:最常用的异步模式,每次都要执行一遍 -
std::lanch::defer
:只在第一次调用的时候执行,之后再调用返回之前的调用结果。
给出代码示例:
#include <iostream>
#include <thread>
#include <chrono>
#include <future>
#include <string>
#include <cstdlib>
using namespace std::chrono;
std::string fetchDataFromDB(const std::string& recvData) {
std::this_thread::sleep_for(seconds(3));
return "DB" + recvData;
}
std::string fetchDataFromFile(const std::string& recvData) {
std::this_thread::sleep_for(seconds(3));
return "File" + recvData;
}
int main() {
system_clock::time_point start = system_clock::now();
std::future<std::string> resultFromDB = std::async(std::launch::async,
fetchDataFromDB, "Data");
std::string fileData = fetchDataFromFile("Data");
std::string dbData = resultFromDB.get();
auto end = system_clock::now();
auto diff = duration_cast<std::chrono::seconds>(end - start).count();
std::cout << "Total Time Taken = " << diff << " Seconds" << std::endl;
std::string data = dbData + "::" + fileData;
std::cout << "Data = " << data << std::endl;
system("pause");
return 0;
}
运行结果: