입출금 문제
보이기
입출금 문제는 입금과 출금이 동시에 수행될 때 발생할 수 있는 문제로서, 경쟁 상태에 관한 문제 중 하나이다.
문제 상황
[편집]1000원이 들어있는 계좌에 대해 500원을 입금하는 작업과 500원을 출금하는 작업을 동시에 수행하는 상황이다.
- 입금 프로세스
... 잔액 = 잔액 + 500 ...
- 출금 프로세스
... 잔액 = 잔액 - 500 ...
이 때, 위 프로세스들에서 작업이 원자적으로 수행되지 않으면, 일관성이 손상될 수 있다. 위 코드에서 잔액 처리부분은 각각 한 문장으로서 원자적으로 보이지만, 실제 컴파일될 때는 아래와 같이 여러 개의 명령어(instruction)로 나뉘게 되어, 원자성을 잃게 된다.
- 고급 언어
잔액 = 잔액 + 500
- 저급 언어
레지스터 = 잔액 레지스터 = 레지스터 + 500 잔액 = 레지스터
해결 방법
[편집]공유 데이터의 일관성을 유지하기 위해 공유 데이터를 접근하는 코드부분을 임계 구역으로 지정함으로써 문제를 해결할 수 있다.