실행 가능한 객체를 넘깁니다
함수 포인터, 함수 객체, 람다와 인자 목록이 새 스레드의 시작점입니다.
스레드를 시작했다면 객체가 소멸되기 전에 반드시
join() 또는 detach()로 상태를 정리해야
합니다.
std::ref 또는 std::cref가
필요합니다.
함수 포인터, 함수 객체, 람다와 인자 목록이 새 스레드의 시작점입니다.
메인 스레드가 결과와 출력 순서를 확정해야 할 때 종료를 대기합니다.
분리 후에는 스레드 객체로 제어할 수 없으므로 참조 인자와 객체 수명에 특히 주의합니다.
joinable()로 아직 정리되지 않은 스레드인지 확인한 뒤
종료 정책을 적용합니다.
스레드 책임 멀티스레딩의 첫 규칙은 "시작한 스레드의 끝을 누가 책임지는가"를 코드에서 분명히 하는 것입니다.