- 공유 자원(Shared Resource)을 둘 이상의 프로세스 또는 스레드가 동시에 읽거나 쓰는 상황 말하며 동시에 접근 시도할 때의 타이밍이 예상되는 결과 값에 영향 줄 수 있는 상태
- 연산의 상대적 순서에 의존하는 프로그램의 경우 동작이 부정확해짐
- 스레드는 서로 다른 코어에서 실행되거나, 운영체제의 스케줄러에 의해 언제든지 한쪽이 멈추고 다른 쪽이 실행될 수 있음
경쟁 상태(조건)으로 발생하는 오류는 재현도 어려움
- 경쟁 상태는 의미적 버그라 실행에 의해 발견할 수 있고 단순 코드읽어서는 찾기 어려움
- sleep 연산을 코드 이곳저곳에 넣어보며 실행시점과 스레드 순서 변화시 몇가지 잠재적 경쟁 조건 지점 찾을 뿐
경쟁 상태 제어 수단 → 동기화