Mutex<T>

락은 MutexGuard가 스코프를 벗어날 때 풀린다

lock().unwrap()은 내부 값에 바로 접근하게 하지 않고 MutexGuard를 반환합니다. 이 가드가 락 보유와 해제를 함께 책임집니다.

1

Mutex::new(5)

데이터는 뮤텍스 안에 들어가고 직접 i32처럼 쓸 수 없습니다.

2

lock().unwrap()

락을 얻을 때까지 기다린 뒤 내부 값을 가리키는 가드를 받습니다.

3

*num = 6

MutexGuard가 가변 참조처럼 동작해 보호된 값을 바꿉니다.

4

스코프 종료

Drop이 실행되어 락을 풀고 다음 접근을 허용합니다.

이 API가 실수를 줄이는 방식

접근 전 락 호출을 빼먹을 수 없음

Mutex<i32>i32가 아니므로 타입이 접근 순서를 강제합니다.

사용 중 가드가 배타 접근을 표현

가드가 살아 있는 동안 같은 뮤텍스의 다른 접근은 기다려야 합니다.

사용 뒤 명시적 unlock이 필요 없음

가드가 버려지는 시점에 락이 풀리므로 해제 호출을 잊는 실수가 줄어듭니다.

패닉이 섞인 경우

다른 스레드가 락을 가진 채 패닉하면 lock은 실패할 수 있습니다. 예제의 unwrap은 학습을 단순하게 하려는 선택이고, 실제 코드에서는 그 LockResult를 상황에 맞게 처리합니다.