Raymond Chen объясняет, как на самом деле устроены C++ futures
C++ futures part 1: The mental model
Raymond Chen разбирает внутреннее устройство std::future, std::promise, std::packaged_task и std::async. Все они построены вокруг одной невидимой сущности — «источника», который умеет один раз установить значение или исключение, дождаться результата и выдать его. Автор показывает упрощённую реализацию с мьютексом, condition variable и union, объясняя, почему повторная установка значения запрещена, а полученное значение помечается как использованное.
Я пишу эту серию, потому что постоянно забываю, как всё это работает, но когда записываю — запоминаю лучше.