mutex/lock

mutex 임계 영역 보호

std::mutex, lock(), unlock(), std::lock_guard, std::unique_lock은 잠금과 해제의 책임을 다르게 표현합니다.

경쟁 조건

counter++ 경쟁 조건

결과가 실행마다 달라지면 공유 상태 보호가 필요합니다.

std::mutex

mutex 임계 구역

직접 unlock을 놓치면 데드락으로 이어질 수 있습니다.

lock_guard

생성 시 잠그고 스코프 종료 시 자동으로 풉니다

짧은 임계 영역에는 가장 단순한 RAII 선택입니다.

unique_lock

unique_lock 유연성

기능이 많은 만큼 잠금 상태를 더 주의해서 읽어야 합니다.

임계 영역 공유 데이터 접근 중 동시에 실행되면 안 되는 코드 구간입니다.
RAII 예외가 나도 소멸자가 unlock을 호출해 잠금 누락을 줄입니다.
데드락 여러 뮤텍스를 다른 순서로 잡으면 서로 기다리며 멈출 수 있습니다.