deadlocklock-orderresource-allocation
데드락의 발생 조건과 예방 방법을 설명해 주세요
- 예상 시간
- 8분
30초 답변
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
상호 배제 조건은 무엇인가요?
순환 대기를 깨는 대표 방법은 무엇인가요?
데드락과 starvation은 어떻게 다른가요?
timeout은 데드락을 완전히 예방하나요?
데드락이 발생했을 때 탐지는 어떻게 하나요?
부가 설명
데드락은 단순히 느린 상태가 아닙니다. 각 작업이 자기 자원은 놓지 않은 채 상대가 가진 자원을 기다리기 때문에 시간이 지나도 자연스럽게 풀리지 않을 수 있습니다. 예를 들어 A는 DB lock을 잡고 file lock을 기다리고, B는 file lock을 잡고 DB lock을 기다리면 둘 다 앞으로 가지 못합니다.
lock을 완전히 없애기보다 lock 규칙을 명확히 두는 쪽이 현실적인 경우가 많습니다. 획득 순서를 정하고, lock 범위를 줄이고, timeout을 두고, 실패 시 재시도 정책을 둡니다. 예방은 네 조건 중 어떤 조건을 깨는지로 정리할 수 있습니다.
한 줄 정리
데드락은 서로 자원을 쥔 채 기다리는 순환 대기이고, 예방은 네 필요 조건 중 하나를 깨는 일입니다.