Если я прав, std :: async использует новый поток и вызывает в нем метод. Мне было интересно, что произойдет, если основной поток или родительский поток умирает. Умирает ли поток, управляющий асинхронным методом?
В C ++ отсутствует понятие «родительский» поток, каждый поток независим от того, которым он был создан. Тем не менее main
поток особенный, и если он возвращается из main()
или звонки exit()
тогда все приложение завершается, даже если другие потоки все еще работают. Как только это происходит, программа имеет неопределенное поведение, если все еще работающие потоки обращаются к любым глобальным переменным или автоматическим объектам, которые были в стеке основного потока, или используют любые стандартные объекты библиотеки или вызывают любую функцию, не разрешенную в обработчиках сигналов.
Короче говоря, не позволяйте другим потокам работать после main
завершает, если вы ожидаете ощутимых результатов.
Других решений пока нет …