thread lifetime

스레드 종료 책임

std::thread, std::ref(), join(), detach(), thread::id는 병렬 실행의 생성과 회수를 설명합니다.

std::thread

스레드 시작 조건

생성 직후부터 메인 흐름과 동시에 진행될 수 있습니다.

값 전달

인자는 기본적으로 복사되어 스레드 함수로 넘어갑니다

큰 객체나 공유 상태는 복사 비용과 변경 반영 여부를 따져야 합니다.

std::ref

참조로 넘길 의도를 명시해 원본을 스레드에서 다룹니다

원본이 스레드보다 먼저 사라지지 않도록 수명을 보장합니다.

join/detach

join/detach 차이

joinable 스레드를 방치하면 종료 시 문제가 생깁니다.

프로세스 프로세스는 독립 주소 공간을 갖고 스레드는 같은 주소 공간을 공유합니다.
종료 대기 join은 결과 순서와 자원 회수를 예측 가능하게 만듭니다.
분리 실행 detach는 소유자가 사라진 뒤에도 실행되므로 공유 데이터 접근이 위험합니다.