Thread Lifetime

std::thread 실행 책임

스레드를 시작했다면 객체가 소멸되기 전에 반드시 join() 또는 detach()로 상태를 정리해야 합니다.

인자 전달생성자 인자는 기본적으로 복사되며, 참조 전달에는 std::ref 또는 std::cref가 필요합니다.
공유 메모리같은 프로세스의 힙과 전역 데이터는 공유되므로 이후 장의 동기화가 필요합니다.
start

실행 가능한 객체를 넘깁니다

함수 포인터, 함수 객체, 람다와 인자 목록이 새 스레드의 시작점입니다.

join

작업 완료까지 기다립니다

메인 스레드가 결과와 출력 순서를 확정해야 할 때 종료를 대기합니다.

detach

독립 실행으로 분리합니다

분리 후에는 스레드 객체로 제어할 수 없으므로 참조 인자와 객체 수명에 특히 주의합니다.

프로세스운영체제에서 독립 메모리 공간과 파일 핸들 같은 자원을 할당받은 실행 단위입니다.
스레드프로세스 안의 실행 흐름이며 코드, 데이터, 힙을 공유하고 각자 스택과 레지스터를 가집니다.
정리 상태joinable()로 아직 정리되지 않은 스레드인지 확인한 뒤 종료 정책을 적용합니다.

스레드 책임 멀티스레딩의 첫 규칙은 "시작한 스레드의 끝을 누가 책임지는가"를 코드에서 분명히 하는 것입니다.