c++future理解

在C++中,std::future是一个模板类,用于访问异步操作的结果。它提供了一种机制,通过这种机制,可以在将来某个时刻获取一个操作的结果,而该操作可能在另一个线程或者异步任务中执行。std::future是C++11引入的一部分,它与多线程编程和异步编程紧密相关。

基本概念- 异步操作:指的是在后台执行的操作,其执行过程不会阻塞当前线程的继续执行。例如,启动一个新线程来执行耗时计算,或者提交一个任务到线程池。- std::f

`std::future` 是 C++11 引入的用于表示**异步操作结果**的对象。它的主要作用是**获取异步任务(如线程、异步函数等)的返回值或异常**。 --- ### ✅ 简短回答: `std::future` 用来从异步操作中获取结果: - 它代表一个**未来才会知道的结果**(即异步操作完成后才会有的结果)。 - 可以通过 `get()` 方法等待结果返回。 - 如果结果还没准备好,调用 `get()` 会**阻塞当前线程**,直到有结果为止。 --- ### 🔍 常见使用方式 #### 1. 配合 `std::async` 使用: ```cpp #include <iostream> #include <future> int main() { std::future<int> f = std::async(std::launch::async, []{ return 42; }); std::cout << "等待结果中..." << std::endl; int result = f.get(); // 阻塞直到结果返回 std::cout << "结果是: " << result << std::endl; return 0; } ``` #### 2. 配合 `std::promise` 使用: ```cpp #include <iostream> #include <future> #include <thread> void setter(std::promise<int> p) { p.set_value(100); } int main() { std::promise<int> p; std::future<int> f = p.get_future(); std::thread t(setter, std::move(p)); std::cout << "等待设置值..." << std::endl; std::cout << "值为: " << f.get() << std::endl; t.join(); return 0; } ``` --- ### ✅ 主要功能总结: | 方法 | 功能 | |------|------| | `get()` | 获取异步操作的结果,**阻塞直到结果可用** | | `wait()` | 等待异步操作完成,**不获取结果** | | `valid()` | 判断 future 是否持有有效的结果 | | `share()` | 将 `future` 转换为 `shared_future`,允许多个 future 共享同一个结果 | --- ### 🧠 类比理解: 你可以把 `std::future` 想象成一个“快递单号”: - 你下单后(启动异步任务),快递还没到(结果还没准备好)。 - 你可以随时查看状态,但真正拿到快递(调用 `get()`)时,可能需要等一等。 - 一旦快递到了(异步完成),你就能拿到里面的东西(获取结果)。 --- ### ✅ 适用场景: - 多线程任务之间传递结果 - 异步网络请求后获取响应 - UI 线程等待后台计算结果 - 并发编程中简化线程间通信 --- ### ✅ 注意事项: - 一个 `future` 只能调用一次 `get()`,多次调用会抛出异常。 - `future` 不是线程安全的,多个线程不能共享同一个 `future` 对象。 - 如果你希望多个线程都能等待同一个结果,应使用 `std::shared_future`。 --- ### ✅ 推荐阅读: - `std::shared_future` 的使用 - `std::packaged_task` 的作用 - `std::future_status` 与 `wait_for()` / `wait_until()` - 异步任务与线程池的结合使用 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞翔公园11223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值