- 교착 상태에 대해서 설명해주세요.2025년 04월 01일 14시 19분 55초에 업로드 된 글입니다.작성자: do_hyuk728x90반응형
교착 상태(deadlock) 는 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있어 결과적으로 아무것도 완료되지 못하는 상태를 의미합니다.
가령, A 프로세스가 자원 A를 가지고 자원 B를 필요로 합니다.
그리고, B 프로세스는 자원 B를 가지고 자원 A가 필요할 때 두 개의 프로세스는 교착 상태에 빠져 어느 작업도 진행할 수 없는 상황이 됩니다.
교착 상태가 발생하는 조건을 알고 계신가요? 🤔
4가지 조건(상호 배제, 점유 대기, 비선점, 원형 대기)이 모두 만족하는 경우, 교착 상태에 빠질 수 있습니다.
- 상호 배제(mutual exclusion) 는 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 경우를 의미합니다.
- 점유 대기(hold and wait) 는 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태를 의미합니다.
- 비선점(non-preemption) 은 자원이 강제적으로 해제될 수 없으며 점유하고 있는 프로세스의 작업이 끝난 이후에만 해제되는 것을 의미합니다.
- 원형 대기(circular wait) 은 프로세스들이 원의 형태로 자원을 대기하는 것을 의미합니다.
자바에서 교착 상태는 어떻게 해결할 수 있나요? 😀
// thread 1 synchronized (resource1) { synchronized(resource2) { ... } } // thread 2 synchronized (resource2) { synchronized(resource1) { ... } }
예를 들어, 자바의 syncronized 키워드로 인한 교착 상태가 발생했다고 가정해보겠습니다.
위와 같은 경우에는 외부 synchronized 블록 내부에 synchronized 블록을 포함하지 않도록 개선하여 점유 대기 조건을 제거하여 교착 상태를 해결할 수 있습니다.
이외에도 ReentrantLock을 사용하는 경우에는 tryLock() 메서드를 사용하여 타임아웃을 설정하거나, lockInterruptibly() 메서드를 사용하여 데드락이 발생하는 경우, 인터럽트를 통해 스레드를 깨울 수 있습니다.
정리하자면 교착 상태가 발생하는 4가지 조건 중 하나를 충족하지 못하게 하거나, 대기하는 경우 무한정 기다리지 않는 방식으로 교착 상태를 풀어볼 수 있습니다.
728x90반응형'면접 대비' 카테고리의 다른 글
Call By Value와 Call By Reference에 대해서 설명해주세요. (0) 2025.04.16 자바 프로그램이 실행되는 흐름을 설명해 주세요. (1) 2025.04.09 Redis가 싱글 스레드로 만들어진 이유를 설명해주세요. (0) 2025.03.28 JWT 특징과 주의 사항을 설명해주세요. (0) 2025.03.27 응집도와 결합도에 대해서 설명해주세요. (0) 2025.03.11 댓글