분리된 스레드가 Main()보다 오래 지속되면 어떻게 되나요?
C에서는 detach()를 사용하여 스레드를 분리하여 실행할 수 있습니다. 처음에 생성한 std::thread 객체와는 독립적입니다. 그러나 main()이 종료될 때 분리된 스레드에 대한 표준 동작은 여전히 모호합니다.
표준 침묵 및 묵시적 효과
C 14 초안의 섹션 1.10이나 30.3 모두 명시적으로 언급되지 않았습니다. main()이 종료될 때 분리된 스레드의 운명을 정의합니다. 이러한 모호함은 다음과 같은 몇 가지 질문으로 이어집니다.
명시적인 지침이 없으면 분리된 스레드에서 main()이 부족함을 의미합니다. 분리된 스레드를 중지하면 본질적으로 detach()가 무의미해지기 때문에 스레드에는 정의된 효과가 있어야 합니다.
묵시적 제한
표준에서는 분리된 스레드에 어떤 일이 발생하는지 명시적으로 명시하지 않습니다. 스레드의 경우 몇 가지 제약 조건을 제공합니다.
분리된 스레드에 합류
분리 여부에 대한 질문 스레드를 조인할 수 있다는 문제도 답변에서 해결되었습니다. 대답은 분리된 스레드가 실제로 *_at_thread_exit 함수 계열(notify_all_at_thread_exit(), std::promise::set_value_at_thread_exit() 등)을 사용하여 조인될 수 있음을 보여줍니다.
정의되지 않은 동작 완화
피하려면 분리된 스레드가 실행 중인 상태에서 main()이 종료될 때 정의되지 않은 동작을 고려하십시오.
결론
C 표준은 main()이 종료될 때 분리된 스레드의 동작을 명시적으로 정의하지 않지만 다음과 같은 제한 사항과 의미를 제공합니다. 정의된 효과. 이러한 제한 사항을 준수하고 *_at_thread_exit 함수 계열을 사용함으로써 프로그래머는 분리된 스레드를 처리하고 정의되지 않은 동작을 방지할 수 있습니다.
위 내용은 C에서 `main()` 함수가 종료되면 분리된 스레드에 어떤 일이 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!