내가 스택 중 하나가 출구 동시에 덤프에 종료 후 다른 스레드의 전역 변수에 액세스하는 것이 안전합니까?
#0 0x00007fe2beac80a4 in __lll_lock_wait() from /lib64/libpthread.so.0
#1 0x00007fe2beac3444 in _L_lock_1087() from /lib64/libpthread.so.0
#2 0x00007fe2beac32b6 in pthread_mutex_lock() from /lib64/libpthread.so.0
#3 0x00007fe2bece5325 in _dl_fini() from /lib64/ld-linux-x86-64.so.2
#4 0x00007fe2bd73a5e5 in __run_exit_handlers() from /lib64/libc.so.6
#5 0x00007fe2bd73a635 in exit() from /lib64/libc.so.6
을 호출되었는지 보여줍니다 덤프를 분석하고하는 것은 글로벌 변수에 액세스하려고 다른 스레드입니다. 따라서 exit가 호출 된 후에 다른 스레드의 전역 변수에 액세스하는 것이 안전합니까? 전역 변수가 종료 된 후 "언제든지"삭제 될까요?
여전히 여러 스레드가 실행되는 동안 [exit()]] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html)을 호출하는 것은 좋지 않습니다. 'exit()'에 대한 POSIX 사양은 ['_exit()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/_exit.html)을 참조하고 프로세스의 결과 중 하나는' _exit'는 쓰레드가 클린업 핸들러 등을 호출하지 않고 종료된다는 것입니다. (_ _Exit() 또는 _exit() 호출로 종료 된 _Threads는 취소 정리 핸들러 또는 쓰레드 데이터 소멸자를 호출하지 않습니다 ._) –
나는 여러 스레드가 활성화되어있는 동안 프로세스를 종료하는 것에 대한 직접적인 조언을 찾지 못했지만 전역 변수 등으로 어지럽 혀지는 동안 다른 프로세스가 전체 프로세스를 죽이는 동안, 깨지기 쉽고, 불확실하고, 일반적으로 나쁜 아이디어가 될 수밖에 없다. –
글쎄,별로 중요한 것은 아닌 멀티 태스킹 OS. Windows, Linux 등은 메모리의 할당을 해제하기 전에 프로세스의 모든 스레드를 중지합니다. 복잡한 응용 프로그램에서 바쁜 프로세스의 스레드를 제외한 모든 스레드를 중지하는 것은 매우 어려울 수 있습니다. 이는 실행되는 동안 앱의 성능에 아무런 추가도하지 않는 개발, 작성, 테스트 등을 필요로하는 더 많은 코드 (즉, 더 많은 버그)를 의미합니다.OS는 사용자 코드보다 스레드를 멈추게하는 것이 훨씬 낫습니다. 왜냐하면 더 나은 도구가 있고 언제든지 모든 코어에서 실행되는 스레드를 멈출 수 있기 때문입니다. 사용자 코드에 문제가있는 것입니다. –