Являются ли функции, зарегистрированные с помощью atexit(), последними выполняемыми функциями? Возможно ли, что другие потоки в это время все еще работают?Неужели atexit ждет, пока другие потоки умрут?
ответ
Выполнены ли функции, зарегистрированные с помощью atexit(), последними функциями, которые должны быть выполнены ?
Звонки atexit() будут выполняться в основном потоке после завершения основного потока. Помимо этого, никаких гарантий не предусмотрено.
Возможно ли, что другие потоки в это время все еще работают?
Да, если вы не предприняли шаги, чтобы остановить другие потоки и присоединиться к ним, прежде чем main() вернется. В общем, вы хотите сделать явное контролируемое завершение всех ваших потоков, поскольку среда выполнения C (или C++) не сделает этого за вас, и позволяет им продолжать работать, даже когда поток main() выходит из этой возможности. что они попытаются получить доступ к ресурсам, которые main() освободил как часть последовательности его выключения, что вызовет неопределенное поведение (часто возникающее как случайный, нелегко-воспроизводимый сбой во время выключения программы)
- 1. Неужели этот C# ждет лишнего?
- 2. Многопоточное матричное умножение в основном потоке не ждет, пока другие потоки не закончат свою работу?
- 3. Неужели Junit отключил все потоки?
- 4. Неужели команда wait не ждет назначения переменной?
- 5. Как спать один поток, пока другие потоки работают в visualC#?
- 6. Приостановить другие потоки, пока нить выполняет определенный вкус?
- 7. В c, как сделать поток, подождите, пока другие потоки закончатся
- 8. Python Multiprocessing atexit Ошибка «Ошибка atexit._run_exitfuncs»
- 9. atexit() функция
- 10. socket.connect() блокирует другие потоки?
- 11. пока не ждет первый получает()
- 12. SSE thread.sleep блокирует другие потоки
- 13. Python раздвоенные процессы не умрут
- 14. Подождите, пока некоторые потоки закончатся
- 15. Подождите, пока пустые потоки завершатся
- 16. оповестить другие потоки событий/действий
- 17. ASIHTTP: addOperation другие потоки работают
- 18. Python threading: второй поток ждет, пока первый не закончит
- 19. X11: ждет, пока не будет видно окно?
- 20. Backbone.js ждет, пока обратный вызов перед рендерингом
- 21. WaitForInputIdle не ждет, пока сайт полностью отобразится
- 22. Promise.all, похоже, не ждет, пока все закончится
- 23. Ajax ждет, пока другая функция закончит выпуск
- 24. RabbitMQ - Отменить consumer.nextДоставка, пока он ждет ответа
- 25. Angulajs ждет, пока REST API вернет данные
- 26. Создать тему, которая ждет, пока var изменится
- 27. Powershell ждет, пока процесс завершит одновременные процессы
- 28. Функция Open Selenium ждет, пока что?
- 29. Java Callablestatement не ждет, пока .execute() заканчивается
- 30. iPhone ждет, пока код не будет выполнен
Я думаю, это не так правда. atexit() вызывается при вызове exit(). Вы можете получить свой основной поток pthread_exit, а остальные потоки продолжатся, пока один из них не вызовет exit(). –
Кто сказал, что они "C++ threads"? 'atexit()' может быть версией C, но я не знаю, есть ли различия в спецификациях, не говоря уже о реализациях! – PJTraill
@PJTraill Вы правы, я изменю свой ответ, чтобы это отразить. –