std::promise和std::future是C++11提供的单次异步通信机制,promise负责设置值或异常,future用于等待并获取该结果;shared_future支持多处并发等待同一结果。

std::promise 和 std::future 是 C++11 引入的异步通信机制,用于在线程间安全地传递单次结果。它们不负责执行任务,只负责“承诺一个值”和“获取那个值”,常与 std::thread、std::async 或线程池配合使用。
std::promise:发出一个“我将来会给你一个值”的承诺
一个 std::promise 对象代表一个可写的“结果容器”。它只能设置一次值(或异常),之后再调用 set_value / set_exception 会抛出 std::future_error。
- 用 promise.set_value(val) 提交结果(类型必须匹配 future 的 value_type)
- 用 promise.set_exception(std::make_exception_ptr(e)) 传递异常
- 通过 promise.get_future() 获取对应的 std::future —— 每个 promise 只能绑定一个 future
std::future:等待并获取 promise 承诺的结果
std::future 是只读句柄,代表一个“尚未就绪但将来会出现的值”。它支持阻塞等待、限时等待、轮询检查,也可移动(不可拷贝)。
- .get():阻塞直到结果就绪,返回值(或 rethrow 异常),调用后 future 失效
- .wait():仅阻塞等待,不取值
- .wait_for(duration) / .wait_until(time_point):带超时的等待,返回 future_status 枚举(ready、timeout、deferred)
- .valid():判断 future 是否关联有效共享状态(比如是否已 move 出或未被 get 过)
典型协作模式:生产者-消费者线程间传值
常见场景是主线程创建 promise/future 对,把 promise 移交给工作线程,自己保留 future 等待结果。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~