작업 함수 결정
스레드에서 실행할 함수와 인자가 복사될지 이동될지 참조될지 확인한다.
참조는 std::ref가 필요하다스레드를 만들 수 있다는 설명만으로는 C++ 동시성 코드를 안전하게 쓸 수 없다. thread 객체가 joinable인지, join과 detach 중 무엇을 선택할지, 참조 인자가 얼마나 오래 살아 있는지, 공유 데이터에 mutex가 필요한지 확인해야 한다.
스레드에서 실행할 함수와 인자가 복사될지 이동될지 참조될지 확인한다.
참조는 std::ref가 필요하다std::thread 생성 직후 별도 실행 흐름이 시작되고 thread 객체는 handle 역할을 한다.
실행 순서는 스케줄러에 달려 있다여러 스레드가 같은 값을 읽고 쓰면 mutex, atomic, channel 같은 동기화가 필요하다.
data race는 undefined behavior다결과를 기다리고 수명을 관리할 수 있으면 join, 독립 실행이면 detach의 수명 위험을 감수한다.
joinable thread 소멸자는 terminate를 부른다스레드 함수 내부 예외를 잡아 전달 경로를 만들고 프로그램 종료 전 모든 스레드 상태를 정리한다.
예외는 스레드 경계를 자동으로 넘어오지 않는다