2012-12-28 2 views
1

답을 찾을 수 없다는 이상한 질문이 있습니다. pthread_create(...)을 사용하여 while(1) (즉, 스레드가 반환하지 않음)을 포함하는 스레드를 시작한다고 가정하겠습니다. 그러나 스레드를 생성하자마자 스레드를 분리합니다. 나중에이 스레드를 시작한 객체가 삭제됩니다.분리 된 스레드를 종료해야합니까?

그 스레드는 어떻게됩니까? 이것은 영원히 취한 자원입니까?

답변

4

스레드가 프로세스에 속합니다. 프로세스가 종료 되 자마자 프로세스 내의 모든 스레드가 종료됩니다. 스레드를 시작한 개체를 삭제해도 스레드의 실행 상태에는 영향을주지 않습니다. 그러나 스레드가 파괴 된 객체에 액세스 할 수 있으면 코어 덤프 문제가 발생할 수 있습니다.

+0

Windows의 경우 _ExitThread_를 사용하여 주 스레드를 종료하는지 여부에 따라 달라집니다. 따라서 _ExitThread_를 사용하여 주 스레드를 종료하면 모든 스레드가 종료 될 때까지 프로세스가 종료되지 않습니다. [link] (http://blogs.msdn.com/b/oldnewthing/archive/2010/08/27/10054832.aspx) – stamhaney

+0

@stamhaney 댓글을 달고 있는지 잘 모르겠지만 프로세스가 종료 될 때 (exit, _exit, _Exit) 모든 스레드가 종료됩니다. 프로세스를 종료하지 않고 주 스레드를 종료 할 수 있다는 것이 맞지만이 사실이 얼마나 중요한지는 확실하지 않습니다. –

+0

@ MaximYegorushkin, 내 의도는 주 스레드가 _ExitThread_를 사용하여 종료되고 해당 프로세스의 실행중인 스레드가 종료되지 않는 경우 프로세스가 종료되지 않는다는 것을 지적하는 데있었습니다. 이 의견은 Evans 주석에만 해당됩니다. – stamhaney

관련 문제