이전예제에서 봤던 DeadLock상황은 엄청 단순한 상황.
실제론 좀 더 복잡한 상황에서 자주 발생함.

2개 이상의 lock이 존재할 경우.
 - Thread1이 Resource1을 Lock걸어 놓고 Resource2를 접근하려고 했지만. Resource2는 이미 Thread2에 의해 Lock걸린 상황
 - 그와 동시에 Thread2는 Thread1에 의해 lock이 걸린 Resource1에 접근하려고 하면 Thread1과 Thread2는 둘다 "교착상태"가 발생하여 더이상 프로세스가 진행되지 않는다.

예시.

해결책.
1. Lock에 접근했을때 일정 시간동안 기다리다가 Lock이 해제가 안되면 포기한다.
 - 해결을 될지 몰라도 근본적인 Lock구조가 꼬여있는 상태는 해결하지 못하기 때문에 좋은 방법은 아니다.
2. DeadLock이 발생했을때 디버깅을 통해 Lock구조를 수정하여 해결
 - 근본적인 해결이지만  DeadLock상황이 개발단계에서 발생하기 힘들기 때문에 문제 발견후 수정이 꽤나 어려움
3. Lock별로 Id를 부여하여 Lock의 순서도를 가식화 하여 관리
 - 2번을 미리 알기위한 방법중 하나

그외 여러방법이 있을 수 있지만 근본적으론 DeadLock을 발견되면 즉시 Lock구조를 수정하는 방법이 최선이고 경험을 통해 구조를 잘짜는법 뿐인것같다.

+ Recent posts