2016-09-29 5 views
0

pthread를 사용하는 개체가 있습니다. 생성자는 여러 스레드를 생성합니다.실행중인 pthread가있는 객체를 삭제하면 어떻게됩니까?

클래스의 소멸자는 모든 스레드에서 pthread_join을 호출합니다.

삭제 중에 어떤 일이 발생합니까? 즉, 삭제 연산자가 갑자기 객체의 할당을 해제하려고하면 종료되지 않은 스레드는 어떻게됩니까?

미리 답변 해 주셔서 감사합니다. :)

+0

최상의 경우 프로그램이 충돌합니다. 그렇지 않다면 프로그램의 기억 속에서 엉망이됩니다. – Hayt

답변

0

조인을 사용하면 소멸자가 조인 된 모든 스레드가 종료 될 때까지 차단됩니다.

pthread_join

pthread_join을() 함수는 종료 스레드에 의해 지정된 스레드에 대해 대기한다. 해당 스레드가 이미 종료 된 경우 pthread_join()이 즉시 반환됩니다. 스레드 에 의해 지정된 스레드는 결합 가능해야합니다.

스레드와 결합하지 않으면 스레드가 계속 실행됩니다. 이것은 정의되지 않은 동작을 호출하는지에 따라 다양한 결과를 가져올 수 있습니다 (예 : 소멸자가 아직 실행중인 스레드 중 하나에서 종료 한 후 삭제 된 객체를 참조하려고 시도).

pthread_t 개체를 삭제하면 시스템에 따라 결과가 달라질 수 있지만 (일반적으로 모든 pthread 구현을 알 수는 없지만) 일반적으로 스레드를 나타내는 기본 시스템 개체에 대한 참조 일뿐입니다. 따라서 해당 스레드에 대한 참조를 잃어 버리며 잠재적으로 나중에 참여할 수 없지만 스레드는 계속 실행됩니다.

관련 문제