소유권을 옮기는 경계는 Send, 참조를 함께 쓰는 경계는 Sync가 지킨다

두 마커 트레이트는 메서드를 제공하지 않는다. 값이 스레드 경계를 어떤 형태로 넘는지 표시해 컴파일러가 안전하지 않은 조합을 미리 막는다.

MOVE 값의 소유권을 다른 스레드로 보내는가?

보낸 뒤 새 스레드가 값을 소유한다.

Send를 확인한다

구성 요소가 모두 Send이면 합성 타입도 보통 자동 구현된다.

가능 Arc<T> 불가 Rc<T>
SHARE &T 참조를 여러 스레드가 함께 쓰는가?

&T가 스레드 사이로 안전하게 이동해야 한다.

Sync를 확인한다

T: Sync는 공유 참조를 통한 동시 접근이 안전하다는 뜻이다.

가능 Mutex<T> 불가 RefCell<T>

내부에 Rc·RefCell처럼 안전하지 않은 구성 요소가 있으면 바깥 타입도 자동으로 제한된다. Send·Sync를 직접 구현하기 전에 그 불변성을 증명할 수 있는지 먼저 묻는다.