Я пытаюсь определить, когда я могу безопасно называть wait() на std::future и std::shared_future. Я никогда не называю get() на future, а future готов к вызову с помощью соответствующего метода set_value().
Я хочу ждать этого future (используя wait(), wait_for(), wait_until()) из нескольких потоков. Мне также нужны вызовы wait() после того, как promise::set_value() был вызван для немедленного возврата.
Из http://www.cplusplus.com/reference/future/future/wait/
Вызов этой функции-члена для недопустимого будущего объекта вызывает поведение undefined
Получение future из promise начинается с valid()==true. Насколько я вижу только future::get() устанавливает valid() обратно на false. Правильно ли это предположение? Могу ли я назвать семейство функций wait() так часто, как я хочу? Будет ли звонить на wait() после того, как значение обещания будет установлено сразу же? Могу ли я вызвать их из нескольких потоков?