Rc 랑 RefCell 은 단일 스레드 안에서 작동해. 스레드 경계를 넘는 순간, 스레드 안전 짝이 필요해: Arc 랑 Mutex. 이 레슨은 Arc 를 소개하고 Concurrency 트랙으로 다리를 놔.
Arc: 원자적 참조 카운팅
Arc<T> 는 원자적 카운트를 가진 Rc<T> 야 — 여러 스레드에서 동시에 clone 하고 drop 해도 안전. 'A' 는 atomic: 카운트를 올리고 내리는 게 원자적 CPU 연산을 써서, 두 스레드가 망칠 수 없어. API 는 Rc 랑 동일; 스레드 안전성 (그리고 아주 작은 성능 비용) 만 달라.
왜 항상 Arc 안 쓰냐?
원자적 연산은 평범한 증가보다 조금 더 비싸. Rc 는 그걸 낼 필요 없는 흔한 단일 스레드 경우를 위해 존재해. 그리고 컴파일러가 선택을 강제해: Rc 는 Send 가 아니라서 (스레드 못 넘음), Rc 를 스레드 간 공유하려 하면 컴파일 안 돼 — 그리고 에러가 Arc 로 안내해. 잘못 고를 수 없어.
단일 스레드엔 Rc/RefCell; 스레드 간엔 Arc/Mutex. 패턴이 평행이야: 공유-가변 단일 스레드엔
Rc<RefCell<T>>, 공유-가변 스레드 간엔 Arc<Mutex<T>>. 컴파일러가 단일 스레드 버전을 스레드 간에 못 쓰게 해 — Send 랑 Sync (다음 트랙) 가 강제해.fearless concurrency 로의 다리
Arc 는 데이터 소유권을 spawn 된 스레드와 공유하는 법이야. 안전한 변형을 위한 Mutex 와 합치면, Arc<Mutex<T>> 가 동시성 Rust 의 공유 상태 주식이야. 다음 트랙이 그걸 구체화해 — 그리고 여기서도 컴파일러가 왜 '데이터 레이스 없음' 을 약속할 수 있는지 보여줘.