멀티 스레드 응용 프로그램에서 atexit
의 사용과 관련하여 의문의 여지가 있습니다.다른 스레드에서 여러 atexit 처리기
가정하자 나는이
Thread A calls atexit(handler_a)
Thread B calls atexit(handler_b)
main() calls atexit(handler_main)
Thread C calls atexit(handler_c)
....
모든 핸들러 함수가 하나의 고유 한 스레드에서 실행하거나 별도의 스레드에서 실행되는 다음 시나리오?
스레드가 하나의 스레드 (하나씩 차례로 실행)에서 실행되면 해당 스레드가 주 스레드가됩니까?
저는 Linux와 g ++를 사용하고 있습니다.
exit()를 호출 한 스레드에서 atexit 핸들러를 순차적으로 호출하는 것이 아니라 exit() 구현을 상상하기는 어렵습니다. 이 표준이 atexit 호출이 동기화되지 않은 atexit 핸들러의 순서를 정의하지는 않지만, 표준은 스레드 안전성을 요구하는 atexit을 필요로하므로 호출에 대한 순서가 있어야하는 것처럼 보입니다. 어쨌든 구현에 따라 서로 다른 스레드의 atexit 호출이 의도적으로 동기화되었는지 여부를 알 수 있습니다. – rici