Что происходит с вызовом std :: async, если родительский / основной поток умирает

Если я прав, std :: async использует новый поток и вызывает в нем метод. Мне было интересно, что произойдет, если основной поток или родительский поток умирает. Умирает ли поток, управляющий асинхронным методом?

2

Решение

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

Короче говоря, не позволяйте другим потокам работать после main завершает, если вы ожидаете ощутимых результатов.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]