경쟁상태 (race condition)
- 여러 프로세스들 또는 스레드들이 공유자원에 동시에 접근하여 읽거나 쓸 때 발생.
->공유자원에 접근하는 순서에 따라 공유자원에 저장되는 값이 달라질 수 있음.
공유자원 (shared resource)
- 여러 프로세스들 또는 스레드들이 공유하는 자원 (공동으로 이용하는 변수, 메모리, 파일)
예시) 생산자 프로세스와 소비자 프로세스
- 생산자 프로세스는 공유버퍼에 생산한 물건을 넣고 소비자 프로세스는 공유버퍼에서 생산한 물건을 가져옴
- 생산자 프로세스와 소비자 프로세스는 공유버퍼에 있는 물건의 수를 확인하기 위해 counter이라는 변수를 사용
producer() { input(buf); counter = counter + 1; // 임계영역 }consumer() { output(buf); counter = counter - 1; // 임계영역 }
- 생산자 프로세스와 소비자 프로세스가 동시에 실행되면 공유자원(counter)에 접근하는 순서에 따라 공유자원(counter)에 저장되는 값이 달리질 수도 있다.
생산자 프로세스의 counter연산이 소비자 프로세스보다 먼저 실행된다면, counter = 4
소비자 프로세스의 counter연산이 생산자 프로세스보다 먼저 실행된다면, counter = 2