join vs detach

join은 회수, detach는 통제 포기다

두 함수 모두 joinable 상태를 해소하지만 의미는 다릅니다. 결과와 종료 순서를 알아야 하면 join이 기본 선택입니다.

join()
호출 스레드가 기다림 작업이 끝날 때까지 main 흐름이 블록됩니다.
정리 시점이 명확함 완료 뒤 thread 객체는 더 이상 joinable이 아닙니다.
사용 위치 결과, 로그, 파일, 공유 데이터 정리가 필요한 작업에 어울립니다.
detach()
객체와 실행 흐름을 분리 thread 객체는 비지만 작업은 백그라운드에서 계속될 수 있습니다.
완료를 기다릴 수 없음 결과, 예외, 종료 순서를 호출자가 직접 회수하지 못합니다.
사용 위치 공유 자원과 종료 순서가 독립적인 짧은 작업에만 제한적으로 씁니다.
소멸자 경고 std::thread 객체가 joinable인 채로 소멸하면 자동 detach가 아니라 std::terminate가 호출됩니다.