이 문제는 계좌가 여러 개일 때 병행성에 관한 문제입니다.

 

exchange 프로시저

 

a. 세 계정에 잔액이 10원, 20원, 30원이 있을 때

값을 서로 바꾸는 exchange 프로시저가 순서대로 동작한다면

어떻든간에 10원, 20원, 30원이라는 차례대로 있음을 밝혀야합니다.

 

exchange 프로시저는 두 계정의 잔액을 가져와서 그 차이를 구해

각각에 인출(withdraw)과 입금(deposit)을 합니다.

여기서 difference가 음수가 나온다면 withdraw는 입금처럼 잔액이 더해지고,

deposit은 인출처럼 잔액이 줄어듭니다.

 

만약 exchange 프로시저가 순서대로 진행된다면

각 계정에서 인출과 입금은 순서대로 일어납니다.

즉, 교환(swap)이 겹치는 일 없이 진행되므로 언제라도 10원, 20원, 30원이 됩니다.

 

이를 시간 흐름도(Timing Diagram)으로 그리면 위와 같습니다.

 

 

b. 하지만 만약 차례대로 돌아가지 않는다면 다음과 같은 그림이 그려집니다.

 

잔액조회를 할 때 Paul은 Peter의 일이 끝났다고 생각하여

은행계좌 a1의 balance를 확인하여 10원의 값을 얻습니다.

하지만 실제로 끝났다면 a1의 balance는 20원이 되어야합니다.

따라서 여기에 문제가 발생하여 10원, 20원, 30원의 차례가 깨지게됩니다.

그렇지만 돈의 들어오고나감(withdraw와 deposit)은 순서를 지키기에

전체 합인 60원은 변화가 없습니다.

 

 

c. 각 계정에서 일어나는 트랜잭션(transaction)을 줄 세워 처리하지 않는다면,

즉, withdraw와 deposit을 줄 세우지 않는다면 합이 같아지는 것도 깨집니다.

 

이 그림과 b의 그림의 차이는 'withdraw : -10'과 'withdraw : -20'이 a1의 것임에도

동시에 실행된다는 것입니다.

따라서 'withdraw : -10'이 끝나기 전에 'withdraw : -20'을 실행하게되어

후자는 a1의 balance로 10원이 남아있다고 확인합니다.

따라서 10원에 20원을 더하므로 최종적으로 30원이 되는 것입니다.

이 얘기는 앞의 연습문제에서 다루어서 어렵지 않게 이해할 수 있었습니다.

 

 

참조

해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 402

 

 

PS

MS Office 2007을 구하여 설치 후 Timing Diagram을 그리는데 이용하였습니다.

그런데 2003보다 더욱 불편하고 제가 원하는 그림이 그려지지 않아 짜증이 났습니다.

그래서 ThinkFree Office 3 Show를 이용하여 그림을 다 그렸고,

현재 다시 OpenOffice 2.4.1을 설치하였습니다.

사실 pptx와 같은 x가 아니라면 2007은 쓰고 싶지 않았습니다.

그러고보니 한글도 이와 비슷한 일을 한 것으로....;;;

크리에이티브 커먼즈 라이선스
Creative Commons License

글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.

트랙백 주소 :: http://nosyu.pe.kr/trackback/1601

댓글을 달아 주세요

[로그인][오픈아이디란?]