@@ -446,14 +446,14 @@ int main(){
446
446
447
447
其实到此基本就差不多了,我们再介绍两个常见问题即可:
448
448
449
- 1 . 如果从 ` std::async ` 获得的 [ std::future] ( https://zh.cppreference.com/w/cpp/thread/future ) 没有被移动或绑定到引用,那么在完整表达式结尾, [ std::future] ( https://zh.cppreference.com/w/cpp/thread/future ) 的 ** 析构函数将阻塞到异步计算完成 ** 。因为临时对象的生存期就在这一行,调用析构函数阻塞执行 。
449
+ 1 . 如果从 ` std::async ` 获得的 [ ` std::future ` ] ( https://zh.cppreference.com/w/cpp/thread/future ) 没有被移动或绑定到引用,那么在完整表达式结尾, ` std::future ` 的 ** [ 析构函数 ] ( https://zh.cppreference.com/w/cpp/thread/future/%7Efuture ) 将阻塞,直到到异步任务完成 ** 。因为临时对象的生存期就在这一行,而对象生存期结束就会调用调用析构函数 。
450
450
451
451
``` cpp
452
452
std::async (std::launch::async, [ ] { f(); }); // 临时量的析构函数等待 f()
453
453
std::async(std::launch::async, [ ] { g(); }); // f() 完成前不开始
454
454
```
455
455
456
- 如你所见,这并不能创建异步任务,会堵塞 ,然后逐个执行。
456
+ 如你所见,这并不能创建异步任务,它会阻塞 ,然后逐个执行。
457
457
458
458
2. 被移动的 `std::future` 没有所有权,失去共享状态,不能调用 `get`、`wait` 成员函数。
459
459
@@ -489,7 +489,7 @@ std::packaged_task<double(int, int)> task([](int a, int b){
489
489
});
490
490
std::future<double>future = task.get_future();
491
491
task(10, 2); // 此处执行任务
492
- std::cout << future.get() << '\n'; // 不堵塞 ,此处获取返回值
492
+ std::cout << future.get() << '\n'; // 不阻塞 ,此处获取返回值
493
493
```
494
494
495
495
> [ 运行] ( https://godbolt.org/z/799Khvadc ) 测试。
@@ -505,7 +505,7 @@ std::thread t{ std::move(task),10,2 }; // 任务在线程中执行
505
505
// todo.. 幻想还有许多耗时的代码
506
506
t.join();
507
507
508
- std::cout << future.get() << '\n'; // 并不堵塞 ,获取任务返回值罢了
508
+ std::cout << future.get() << '\n'; // 并不阻塞 ,获取任务返回值罢了
509
509
```
510
510
511
511
> [运行](https://godbolt.org/z/85r9db49z)测试。
0 commit comments