The words "promise" and "future" have historically been used rather interchangeably in concurrent programming, but they have very particular meanings in C++.
A promise
is an asynchronous provider – it provides a result to a shared state
A future
is an asynchronous return object – it reads a result from a shared state, waiting for it if necessary
- You construct a
promise
of type T, and you are creating a shared state that can store a variable of type T - You can get a
future
from this promise withget_future()
- You can set the value of the promise’s variable with
set_value()
- The future can read the value of the variable when it becomes available with its
get()
method
Below is a simple example of creating a promise, getting a future from it, sending the future to a thread, setting the value of the promise, and finally retrieving it from the future.
#include <iostream> #include <functional> #include <thread> #include <future> template <typename T> void print (std::future<T>& fut) { T x = fut.get(); std::cout << "value: " << x << "\n"; } int main() { std::promise<int> prom; std::future<int> fut = prom.get_future(); std::thread thr (print<int>, std::ref(fut)); prom.set_value(10); thr.join(); }