← 질문 목록
#16깊이 0

데드락은 어떤 조건이 모두 모여야 생기는가?

운영체제기초동시성

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

여러 실행 흐름이 서로 가진 자원을 기다려 누구도 진행하지 못하는 상태다. 아래 네 조건은 데드락이 생기기 위한 필요 조건이다.

조건뜻
상호 배제자원을 한 번에 하나만 쓸 수 있다
점유하며 대기하나를 쥔 채로 다른 것을 기다린다
비선점쥔 것을 강제로 뺏을 수 없다
순환 대기기다림이 고리를 이룬다

실무에서는 순환 대기를 없애기 쉽다. 여러 자원을 잡는 모든 경로가 같은 전역 순서를 따르면 기다림 고리를 만들지 않는다. 계좌 두 개를 잠글 때 항상 작은 번호부터 잡는 식이다.

try-lock과 시간 제한으로 못 잡은 자원을 포기하고 이미 잡은 자원을 놓을 수도 있다. 재시도에 무작위 지연이 없으면 두 작업이 계속 양보하는 livelock이 생길 수 있다. 한쪽만 계속 실패하면 starvation이다.

탐지 여부는 실행 환경마다 다르다. Java 언어는 데드락 탐지를 요구하지 않는다. PostgreSQL은 잠금의 기다림 고리를 탐지하면 트랜잭션 하나를 중단한다. 애플리케이션은 오류를 받고 트랜잭션 전체를 다시 실행할 수 있어야 한다.

오래 기다린다는 사실만으로 데드락은 아니다. wait-for graph의 고리, 스레드 덤프나 데이터베이스 잠금 정보를 확인한다. 긴 작업, 자원 고갈과 단순 lock contention도 따로 구분한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

데드락은 어떤 조건이 모두 모여야 생기는가?