Critical Section

깨진 조건이 버그의 이름을 바꾼다

상호 배제, 진행, 한정 대기는 서로 다른 실패 모드를 막기 위한 최소 요구 조건이다.

Mutual Exclusion

한 번에 하나만

둘 이상이 동시에 들어가면 공유 값이 덮어써진다.

실패: 경쟁 조건
Progress

비어 있으면 진입

아무도 쓰지 않는데 모두 기다리면 시스템이 멈춘다.

실패: 교착 또는 라이브락
Bounded Waiting

기다림에 한계

특정 스레드가 계속 밀리면 공정성이 깨진다.

실패: 기아