Ho qualche domanda sul comportamento della funzione std::async
con std::launch::async
politica & std::future
oggetto restituito da asincrono.il comportamento di std :: async con std :: launch :: politica async
Nel seguente codice, il thread principale attende il completamento di foo()
sul thread creato dalla chiamata async
.
#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;
}
E so http://www.stdthread.co.uk/doc/headers/future/async.html dice
Il distruttore dell'ultimo oggetto futuro associato alla Stato asincrona del std :: restituita futuro deve bloccare fino a quando il futuro è pronto.
La mia domanda è:
- Q1. Questo comportamento è conforme all'attuale standard C++?
- Q2. Se la risposta di Q1 è sì, quali affermazioni lo dicono?
La cosa sorprendente dello standard è che spesso una nota a piè di pagina cambia completamente un capitolo ... – orlp