Atexit ждет, когда другие потоки умирают?

Функции, зарегистрированные с помощью atexit(), являются последними выполняемыми функциями? Возможно ли, что другие потоки в это время все еще работают?

1 ответ

Решение

Функции, зарегистрированные с помощью atexit(), являются последними выполняемыми функциями?

Вызовы atexit() будут выполняться в главном потоке после того, как основной поток завершит выполнение. Кроме этого, никаких гарантий не делается.

Возможно ли, что другие потоки в это время все еще работают?

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

Другие вопросы по тегам