std::launch::async强制异步执行,立即创建新线程运行任务,并发不阻塞主线程;std::launch::deferred延迟执行,仅当future调用get或wait时才在调用者线程同步执行任务。

在C++中,std::async 是一个用于异步启动任务的函数模板,它返回一个 std::future 对象,用来获取异步操作的结果。std::async 接受一个启动策略(launch policy)来控制任务的执行方式。最常见的两种策略是 std::launch::async 和 std::launch::deferred,它们决定了任务何时以及如何运行。
使用该策略时,std::async 会立即创建一个新的线程来执行任务,保证任务在后台并发运行。
auto future = std::async(std::launch::async, []() {
return do_something();
});
// 此时新线程已经开始运行
int result = future.get(); // 等待结果
使用该策略时,任务,也不会创建新线程。任务的执行被推迟到 future 显式调用 get() 或 wait() 的那一刻,并且是在调用者的线程中同步执行。
auto future = std::async(std::launch::deferred, []() {
return do_something();
});
// 此时 do_something 尚未运行
int result = future.get(); // 在这里同步执行
如果不显式指定策略,std::async 的默认启动模式是:
立即学习“C++免费学习笔记(深入)”;
std::launch::async | std::launch::deferred
这意味着运行时可以自行决定是异步执行还是延迟执行。编译器和运行环境根据负载、线程资源等情况动态选择最优方式。这种灵活性可能导致行为不一致,因此在需要明确并发行为时,建议显式指定策略。
基本上就这些。理解这两种策略的关键在于:一个是“马上开线程”,另一个是“等你来取结果时才执行”。根据性能需求和线程安全考虑选择合适的策略。
以上就是C++的std::async策略是什么_C++中std::launch::async和std::launch::deferred的区别的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号