상호 배제
한 스레드가 임계 영역에 들어가면 다른 스레드는 기다려야 한다.
경쟁 조건은 읽기-수정-쓰기 사이에 다른 실행 흐름이 끼어들 때 발생한다.
한 스레드가 임계 영역에 들어가면 다른 스레드는 기다려야 한다.
임계 영역이 비어 있으면 진입할 스레드가 유한 시간 안에 정해져야 한다.
특정 스레드가 계속 밀려 영원히 못 들어가는 기아를 막는다.
counter++ 같은 한 줄도 실제로는 여러 단계라서, 보호 범위를 코드 줄이 아니라 상태 변화 단위로 잡아야 한다.