Является ли передача std::future
отдельному экземпляру std::thread
безопасной операцией? Я знаю, что внизу std::future
имеет состояние в shared_ptr, которое он разделяет с std::promise
. Вот пример.
int main()
{
std::promise<void> p;
std::thread( [f = p.get_future()]() {
if ( f.wait_for( std::chrono::seconds( 2 ) ) == std::future_status::ready )
{
return;
}
std::terminate();
} ).detach();
// wait for some operation
p.set_value();
}
В приведенном выше коде возможен случай ошибки, когда лямбда выполняется после выхода из основного потока. Общее состояние остается после выхода из основного потока?