Lock을 사용하는 스레드 동기화 방법

두 개 이상의 스레드가 하나의 공통 자원에 액세스하려고하면 문제가 발생하는 경우가 있습니다. 만약 해당 자원이 내부 속성이 변하지 않는 객체라면 문제될 것이 없겠습니다만, 내부 속성이 변경이 가능하다면 상황이 달라집니다. 예를 들어 두 개의 스레드 A, B 가 공통된 변수 i 에 접근하는 상황을 가정해봅시다.

i를 상수로 가정하고 그 어떤 스레드에서도 변경하지 않는다면 A, B 스레드는 언제든 i에 접근하여 그 값을 읽을 수 있고, 이 때 i의 정보가 손상되지 않을 것이라 확신할 수 있습니다.

하지만 i 값 자체가 바뀌거나, i가 참조하고 있는 객체의 내부 상태가 바뀔 수 있다면 어떨까요? 스레드 A가 i의 값을 변조하고, 스레드 B가 i의 값을 참조하는 상황을 가정해봅시다. A가 어느시점에 i의 값을 변조하는데, 이와 동시에 스레드 B의 코드 여러 줄에서 i의 값을 반복적으로 참조한다면, B의 입장에서는 아무짓도 하지 않았지만 바로 윗줄에서의 i와 지금 라인에서의 i가 다른 값일 수 있다는 예측할 수 없는 상황에 놓이게 됩니다.

Lock을 사용하는 스레드 동기화 방법 더보기