Многопоточная программа зависла в оптимизированном режиме, но нормально работает в -O0

Я написал простую многопоточную программу следующим образом:

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;
}

Он ведет себя нормально в режиме отладки в Visual Studio или -O0 в gc c и распечатайте результат через 1 секунд. Но он застрял и ничего не печатает в режиме Release или -O1 -O2 -O3.

67
задан curiousguy 24 October 2019 в 04:46
поделиться