【发布时间】:2018-08-18 13:46:01
【问题描述】:
我有一些代码示例。我将launch::async 传递给async,所以我希望lambda 函数会被立即调用,但它不会。
#include <iostream>
#include <future>
#include <thread>
#include <vector>
#include <chrono>
#include <string>
using namespace std;
mutex m;
void print(string s)
{
lock_guard<mutex> l(m);
cout << s << endl;
}
int main() {
print("main thread1");
std::future<int> f = std::async(launch::async, [](){
print("async");
return 1;
});
print("main thread2");
int i = f.get();
print("main thread3");
return 0;
}
我期望的结果如下:
main thread1 async main thread2 main thread3
但真正的输出是这样的:
main thread1 main thread2 async main thread3
你能解释一下为什么只有当future的get()被调用时才会调用lambda?
如果我将sleep_for 放在main thread2 之前,输出就是我所期望的。
【问题讨论】:
-
lambda 被异步调用。它可以在调用
std::async和std::future::get之间的main的任何部分之前、之后或同时调用。
标签: c++ multithreading asynchronous