Atexit ждет, когда другие потоки умирают?
Функции, зарегистрированные с помощью atexit(), являются последними выполняемыми функциями? Возможно ли, что другие потоки в это время все еще работают?
1 ответ
Функции, зарегистрированные с помощью atexit(), являются последними выполняемыми функциями?
Вызовы atexit() будут выполняться в главном потоке после того, как основной поток завершит выполнение. Кроме этого, никаких гарантий не делается.
Возможно ли, что другие потоки в это время все еще работают?
Да, если вы не предприняли шагов, чтобы остановить другие потоки и присоединиться к ним () до того, как main() вернется. В общем, вы хотите сделать явное контролируемое отключение всех ваших потоков, так как среда выполнения C (или C++) не сделает этого за вас, и позволить им продолжать работать, даже когда выходной поток main() представляет возможность что они будут пытаться получить доступ к ресурсам, которые main() освободили как часть своей последовательности завершения работы, что вызовет неопределенное поведение (часто воспринимаемое как случайный, не легко воспроизводимый сбой во время завершения работы программы)