← 질문 목록
#24깊이 0
데드락은 어떤 조건이 모두 모여야 생기는가?
네 조건이 동시에 성립할 때다. 하나만 깨도 데드락은 생기지 않는다.
| 조건 | 뜻 |
|---|---|
| 상호 배제 | 자원을 한 번에 하나만 쓸 수 있다 |
| 점유하며 대기 | 하나를 쥔 채로 다른 것을 기다린다 |
| 비선점 | 쥔 것을 강제로 뺏을 수 없다 |
| 순환 대기 | 기다림이 고리를 이룬다 |
가장 자주 깨뜨리는 조건은 순환 대기다. 자원에 순서를 매기고 항상 그 순서로만 잡게 하면 고리가 생길 수 없다. 계좌 두 개를 잠글 때 언제나 번호가 작은 쪽부터 잡는 식이다.
점유하며 대기를 깨는 방법도 있다. 필요한 자원을 한 번에 전부 잡거나, 못 잡으면 쥔 것을 놓고 처음부터 다시 한다. 다만 이쪽은 굶주림이 생길 수 있다 — 계속 실패하는 쪽이 영영 못 잡는다.
예방과 회피와 탐지는 서로 다른 대응이다. 예방은 조건을 아예 못 만들게 한다. 회피는 요청마다 안전한지 따져본다. 탐지는 생기게 두되 발견하면 푼다. 데이터베이스는 대개 마지막을 고른다 — 앞의 둘이 처리량을 너무 깎기 때문이다.