thread safety
스레드 안전 흐름은 시작보다 합류와 수명 경계를 먼저 확인한다
새 스레드는 실행 순서가 고정되지 않는다. 안전한 사용은 값의 이동, 핸들 보관, 합류 지점, 공유 상태 여부를 분리해 읽는 데서 시작한다.
핵심 구분
spawn은 시작, move는 수명 경계,
join은 완료 확인이다.
| 경계 | 질문 | 안전 장치 | 실패 신호 |
|---|---|---|---|
spawn |
이 작업은 새 스레드에서 독립 실행돼도 되는가. | 클로저가 필요한 입력만 갖는다. | 메인 흐름과 출력 순서를 기대한다. |
move |
새 스레드가 쓸 값의 소유권은 어디 있는가. | 빌린 값 대신 소유 값을 넘긴다. | 스레드가 오래 사는 참조를 잡는다. |
JoinHandle |
나중에 완료를 확인할 핸들을 보관했는가. | 핸들을 변수에 담고 합류 위치를 정한다. | 생성만 하고 종료를 추적하지 않는다. |
join |
현재 스레드가 어디에서 기다려야 하는가. | 결과를 확인하고 panic 가능성을 다룬다. | 조기 종료로 작업이 끝까지 못 간다. |
| 공유 상태 | 같은 값을 여러 스레드가 동시에 만지는가. |
채널, Arc, 잠금 구조를 검토한다.
|
경합 조건과 수명 문제가 섞인다. |
No order
스케줄링은 운영 체제가 결정하므로 출력 순서는 테스트 기준이
아니다.
Main exit
메인이 먼저 끝나면 생성된 스레드도 끝까지 실행되지 못할 수
있다.
Owned values
move로 필요한 값을 넘기면 수명 경계가
선명해진다.
Wait point
join 위치가 완료 보장과 프로그램 흐름을
결정한다.