2009-09-23 4 views
1

주 스레드가 종료 된 후에도 계속 실행되는 스레드가있는 문제를 디버깅하고 있습니다. 그것은 다른 스레드가 변수를 변경하기를 기다리는 루프에서 멈춰 있습니다.주 스레드가 완료되면 어떤 조건에서 C++ 프로그램이 계속됩니까?

주 스레드가 종료 된 후 프로세스가 계속 실행되는 상황을 이해하려고합니다. 나는 32 비트 리눅스를 사용하고 g ++ 의 pthreads

답변

2

pthread_exit()를 사용하여 main() 함수를 종료하면 다른 스레드가 완료되면 프로세스가 종료됩니다. 어떤면에서는 이상이 아닙니다.

+0

추가 상황이 발생할 수 있습니까? – Juan

+0

다른 상황이 발생할 수 있습니다. 그러나 스레드 중 하나에서 exit()를 호출하면 main() 함수에서 return/exit()를 호출 한 것처럼 전체 프로세스가 종료됩니다. – zacsek

+0

주 스레드가'pthread_cancel()'으로 취소 된 경우도 있습니다. 이것은 한 스레드 만 취소합니다. 다른 사람들은 계속해서 달릴 것입니다. – mark4o

0

에만 프로세스가 좀비가 될 수 있기 때문에 정말 wird 동작입니다. 스레드는 주 프로그램 스레드 범위의 메모리에 배치됩니다. 주 스레드가 완료되면 분리 된 스레드까지도 시스템에 의해 간단히 종료됩니다. 코드를 게시 할 수 있습니까?

0

이것은 C++ 관련 질문이 아닙니다. 프로세스가 종료() 시스템 호출을 호출 할 때 메인 서브 루틴에서 반환에 암시 적으로 종료 할 준비가하거나 그는 pthreads 정보와

일반적으로 리눅스 프로세스 mangement에 대해, 프로세스 파괴는 명시 적, 발생 프로그램 (즉, C 컴파일러 )은 main() 이 반환 된 후 exit()를 호출합니다. http://www.informit.com/articles/article.aspx?p=370047&seqNum=4

내가 당신이 볼 수있는 행동이 이상 말하고 싶지만, 읽어 보시기 가졌어요. 나는 창문에서 비슷한 것을 보았다. 나는 사양에 따라 그것을 믿지 않는다. 오히려 OS, 런타임 라이브러리 등의 버그입니다.

+0

어떤 의미에서는 전역 객체의 정적 생성과 파괴를 다루기 때문에 C++ 문제입니다. – Juan

+0

질문에 언급하지 않았습니다. 그게 좋은 연습이 아니야. 귀하의 질문에 그러한 중요한 조건을 설명하십시오. –

+0

저는 C가 아닌 C++에 대해서 말하고 있습니다. 언어가 작동하는 방식이기 때문에 정적 객체의 전역 생성과 파괴가 있다는 것은 암묵적으로 이해되어야합니다. – Juan

관련 문제