스레딩 공백의 분리된 스레드
멀티 스레드 프로그래밍에서 분리된 스레드는 원래 소유자 스레드에서 분리된 후에도 계속 실행됩니다. . 이는 다음과 같은 질문을 제기합니다: 메인 스레드가 종료되면 아직 실행 중인 분리된 스레드는 어떻게 되나요?
표준 응답
C 표준(N3797)은 침묵을 유지합니다. main()이 종료될 때 분리된 스레드의 운명에 대해. 섹션 1.10(프로그램 종료)이나 섹션 30.3(스레드) 모두 동작을 명시적으로 정의하지 않습니다.
이 생략에도 불구하고 일반적으로 분리된 스레드는 실행이 완료될 때까지 계속 실행되는 것으로 가정됩니다. 이 가정은 스레드가 운영 체제에 의해 제어되는 엔터티이고 프로그램의 메인 스레드에 의해 종료될 수 없다는 사실에서 비롯됩니다.
잠재적 위험
그러나 분리를 허용합니다. 무한정 계속되는 스레드는 이러한 스레드가 다른 스레드에 속한 변수 또는 정적 개체에 액세스하거나 정적 개체가 소멸된 후 정적 개체를 건드릴 경우 정의되지 않은 동작으로 이어질 수 있습니다. 결론.
특히 C 표준(섹션 1)에서는 모든 스레드 개체가 삭제되고 잠재적인 신호 처리기의 실행이 완료된 후 유일하게 허용되는 코드는 신호 처리기에서 허용되는 코드라고 명시합니다(예: ,
예외 접근 방식
main()이 종료될 때 분리된 스레드가 계속 실행되는 동안 정의되지 않은 동작을 방지하기 위해 개발자는 다음을 채택할 수 있습니다. 두 가지 접근 방식 중 하나:
결론
C 표준에서는 분리된 개체의 동작을 명시적으로 정의하지 않지만 main()이 종료될 때 스레드는 완료될 때까지 계속 실행되는 것으로 추론할 수 있습니다. 개발자는 관련된 잠재적인 위험을 인지하고 정의되지 않은 동작을 방지하기 위해 적절한 조치(수동 참여 또는 신호 처리기 안전)를 사용해야 합니다.
위 내용은 C에서 기본 스레드가 종료되면 분리된 스레드에는 어떤 일이 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!