J'ai écrit un simple programme multithread comme suit :
static bool finished = false;
int func()
{
size_t i = 0;
while (!finished)
++i;
return i;
}
int main()
{
auto result=std::async(std::launch::async, func);
std::this_thread::sleep_for(std::chrono::seconds(1));
finished=true;
std::cout<<"result ="<<result.get();
std::cout<<"\nmain thread id="<<std::this_thread::get_id()<<std::endl;
}
Il se comporte normalement en mode débogage dans Visual studio ou -O0
dans gc c et imprime le résultat après 1
secondes. Mais il s'est bloqué et n'imprime rien en mode Release -O1 -O2 -O3
.