Mutex 공유 시도

컴파일러 에러를 따라가면 Arc<Mutex<T>>에 도착합니다

카운터를 10개 스레드가 함께 증가시키려면 값 보호와 스레드 안전한 복수 소유권이 동시에 필요합니다.

1 E0382

Mutex<i32>를 클로저로 직접 이동

let counter = Mutex::new(0);
판단 첫 반복에서 소유권이 이동되어 다음 반복의 스레드가 같은 값을 받을 수 없습니다.
2 E0277

Rc<Mutex<i32>>로 복수 소유 시도

let counter = Rc::new(Mutex::new(0));
판단 Rc<T>는 참조 카운트를 스레드 안전하게 바꾸지 않아 Send가 아닙니다.
3 OK

Arc<Mutex<i32>>로 스레드 안전 공유

let counter = Arc::new(Mutex::new(0));
판단 Arc가 소유권을 공유하고 Mutex가 한 번에 한 스레드의 가변 접근을 보장합니다.