argument passing

std::thread 인자는 기본 복사, 참조는 std::ref로 명시한다

스레드 생성자에 변수 이름을 넘겨도 자동 참조가 아닙니다. 복사본을 쓸지, 원본을 공유할지 코드에서 분명히 드러내야 합니다.

기본 전달 copy
int value = 10; std::thread t(modify, value);
thread 저장소 value 복사본
join 후 원본 main의 value는 그대로입니다.
참조 전달 std::ref
int value = 10; std::thread t(modify, std::ref(value));
thread 저장소 원본 참조 wrapper
join 후 원본 스레드가 바꾼 값이 main에도 보입니다.
작은 값 복사가 가장 단순하고 안전합니다.
큰 객체 복사 비용이 크면 move 또는 공유 소유권을 검토합니다.
공유 수정 std::ref와 함께 수명 보장, mutex 같은 동기화가 필요합니다.