경쟁 조건은 같은 값을 동시에 읽고 쓰며 발생합니다

counter++는 읽기, 계산, 쓰기의 세 단계입니다. 두 스레드가 이 단계를 겹쳐 실행하면 증가가 사라지고, 뮤텍스와 RAII 락은 그 구간을 한 번에 한 스레드만 지나가게 합니다.

counter 모든 스레드가 함께 수정하는 변수

락이 없을 때: Lost Update

위험
Thread A counter 값을 7로 읽습니다. read 7
Thread B A가 쓰기 전에 같은 값 7을 읽습니다. read 7
두 스레드 각자 8을 계산합니다. 7 + 1
마지막 쓰기 둘 다 8을 저장해 증가 1회가 사라집니다. write 8
!
예상 9, 실제 8 실행 순서에 따라 결과가 달라지는 경쟁 조건입니다.

뮤텍스와 락: 임계 영역 직렬화

보호
락 객체 생성 스코프 시작에서 mutex를 잠급니다. lock_guard
Thread A 진입 임계 영역에서 counter를 7에서 8로 바꿉니다. 7 -> 8
Thread B 대기 같은 mutex가 풀릴 때까지 임계 영역 밖에서 기다립니다. wait
자동 해제 B가 새 값 8을 읽고 9로 저장합니다. 8 -> 9
항상 2회 증가 공유 자원 접근 순서를 하나로 만들어 결과를 안정화합니다.