2.2.3 공유 자원과 동기화 문제
앞에서 프로세스 내에 스레드가 여러 개 있으면 코드 영역, 데이터 영역, 힙 영역 등의 프로세스 자원을 공유하면서 실행된다고 했습니다. 이때 여러 스레드가 프로세스의 변수나 메모리 등의 자원을 함께 사용하기 때문에 공유 자원(shared resource) 문제가 발생하기도 하는데, 대표적으로 경쟁 조건(race condition)을 들 수 있습니다.
경쟁 조건은 2개 이상의 스레드가 동시에 같은 자원에 접근해 읽기나 쓰기 작업을 수행했을 때 발생합니다. 예를 들어 한 계좌에 두 사람이 동시에 송금하는 경우를 생각해봅시다. A와 B라는 사람이 K 계좌에 동시에 10,000원을 송금했다면 K 계좌에는 총 20,000원이 입금돼야 합니다. 하지만 경쟁 조건 문제가 발생하면 10,000원만 입금될 수도 있습니다. 하나의 자원에 둘 이상의 작업이 동시에 이뤄져 예측할 수 없는 결과가 나타난 것입니다.
그림 2-18 동시에 송금했을 때 경쟁 조건 문제가 발생한 경우