현대 운영체제는 다중 프로세스 혹은 다중 스레드를 병행(concurrent) 으로 실행함.
여러 프로세스가 동시에 CPU, 메모리, I/O 자원을 공유하므로,
동시 접근(synchronous access) 으로 인한 데이터 일관성 문제(race condition) 가 발생할 수 있음
Competition-based concurrency 는 “자원을 얻기 위한 경쟁(경합)”을,
Cooperation-based concurrency 는 “공통 목표를 위한 협력(병행)”을 의미한다.
전자는 CPU 스케줄링 중심, 후자는 동기화와 병렬 처리 중심이다.
두 개 이상의 프로세스(또는 스레드)가 공유 데이터(shared data) 를 동시에 접근하여
결과가 실행 순서에 따라 달라지는 상황
예시:
count = count + 1;
위 연산은 실제로 다음 세 단계로 나뉨:
만약 두 스레드가 동시에 수행하면 중간 결과가 덮어써져 잘못된 값이 저장될 수 있음.
Race condition은 병렬 처리 시스템, 멀티코어 환경, 공유 메모리 기반 통신에서 자주 발생함.
while (true) {
entry section; // 진입 요청
critical section; // 공유 데이터 접근
exit section; // 해제
remainder section; // 나머지 코드
}