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

std::promise 和 std::future 是 C++11 引入的异步通信机制,用于在线程间安全地传递单次结果。它们不负责执行任务,只负责“承诺一个值”和“获取那个值”,常与 std::thread、std::async 或线程池配合使用。
一个 std::promise 对象代表一个可写的“结果容器”。它只能设置一次值(或异常),之后再调用 set_value / set_exception 会抛出 std::future_error。
std::future 是只读句柄,代表一个“尚未就绪但将来会出现的值”。它支持阻塞等待、限时等待、轮询检查,也可移动(不可拷贝)。
常见场景是主线程创建 promise/future 对,把 promise 移交给工作线程,自己保留 future 等待结果。
立即学习“C++免费学习笔记(深入)”;
std::promise<int> p;
std::future<int> f = p.get_future();
std::thread t([&p]() {
std::this_thread::sleep_for(1s);
p.set_value(42); // 工作线程完成计算后交付结果
});
t.detach(); // 或 join()
// 主线程等待结果
int result = f.get(); // 阻塞直到 set_value 被调用
std::future 不可拷贝,如果多个地方需要等待同一个结果,需用 std::shared_future。它由 future.share() 创建,允许多个实例同时 wait / get(但 get 仍只能调用一次 per instance,且所有实例共享底层状态)。
基本上就这些。promise/future 不复杂但容易忽略细节——比如忘记 detach/join 线程、重复调用 get、误用拷贝 future,都会导致未定义行为或死锁。用好它们的关键是明确“谁生产、谁消费、何时交付、如何容错”。
以上就是c++++中std::promise和std::future怎么用_c++异步编程模型详解【多线程】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号