gpt4 book ai didi

c++ - std::async 不会立即调用

转载 作者:行者123 更新时间:2023-11-30 01:36:31 27 4
gpt4 key购买 nike

我有一些代码示例。我将 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 之前,输出就是我所期望的。

最佳答案

一旦新线程创建,对async 的调用就会返回。您现在有两个独立的线程,这两个线程中的操作之间的唯一关联是调用 async 创建的线程必须在调用 f.get() 之前完成 返回。因此,您看到的行为符合要求。您期望的行为也符合要求。这就是运行单独线程的意义所在:它们独立运行,直到您执行某些操作来同步它们。

关于c++ - std::async 不会立即调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51909317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com