락 해제 책임을 스코프 규칙에 맡깁니다

직접 lock()unlock()을 짝지어 쓰면 예외, 조기 반환, 분기에서 해제를 놓치기 쉽습니다. RAII 락 객체는 생성과 소멸에 잠금 생명주기를 묶습니다.

RAII 잠금 생명주기

mutex ownership
락 객체 생성 생성자가 mutex 소유권을 얻습니다. std::lock_guard
임계 영역 실행 공유 데이터 변경 코드는 잠긴 범위 안에만 둡니다. counter++
모든 종료 경로 정상 종료, return, 예외가 같은 스코프 출구로 모입니다. normal / return / throw
소멸자에서 자동 해제 스택 풀기 중에도 mutex가 풀려 대기 스레드가 진행합니다. ~lock_guard()