Tengo algunas dudas sobre el comportamiento de std::async
función con std::launch::async
política & std::future
objeto devuelto por asíncrona.el comportamiento de std :: asíncrono con la política std :: :: lanzamiento asíncrono
En el siguiente código, el hilo principal espera la finalización de foo()
en el hilo creado por async
llamada.
#include <thread>
#include <future>
#include <iostream>
void foo()
{
std::cout << "foo:begin" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(10));
std::cout << "foo:done" << std::endl;
}
int main()
{
std::cout << "main:begin" << std::endl;
{
auto f = std::async(std::launch::async, foo);
// dtor f::~f blocks until completion of foo()... why??
}
std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << "main:done" << std::endl;
}
Y sé http://www.stdthread.co.uk/doc/headers/future/async.html dice
El destructor del último objeto futuros asociados con el estado asíncrona de la std :: regresado futuro se bloqueará hasta que el futuro está listo.
Mi pregunta es:
- Q1. ¿Este comportamiento se ajusta al estándar actual de C++?
- Q2. Si la respuesta de Q1 es sí, ¿qué afirmaciones dicen eso?
Lo que es tan sorprendente acerca del estándar es que a menudo una nota al pie cambia por completo un capítulo ... – orlp