데드락은 둘 이상의 스레드가 각각 다른 스레드가 쥐고 있는 자원을 영원히 기다려서 아무도 진행할 수 없는 상태입니다. 이는 네 가지 조건(코프만 조건, Coffman conditions)이 동시에 성립할 것을 요구합니다.
데드락은 둘 이상의 스레드가 각각 다른 스레드가 쥐고 있는 자원을 영원히 기다려서 아무도 진행할 수 없는 상태입니다. 이는 네 가지 조건(코프만 조건, Coffman conditions)이 동시에 성립할 것을 요구합니다.
이 중 하나만 깨뜨려도 데드락은 불가능해집니다.
Thread 1 holds A, wants B ─┐
├─ circular wait → deadlock
Thread 2 holds B, wants A ─┘
# DEADLOCK: threads lock in opposite orders
def t1():
with lockA:
with lockB: ... # T1: A then B
def t2():
with lockB:
with lockA: ... # T2: B then A ← cycle!
# FIX: impose a global lock ordering (always A before B)
def safe():
with lockA:
with lockB: ... # everyone acquires in the same order
tryAcquire(timeout)으로 물러섰다가 재시도하세요 — 점유와 대기를 깨뜨립니다.데드락은 시스템을 조용히 얼려버립니다 — 크래시 없이, 그저 멈춘 요청들뿐이죠. 네 가지 조건을 짚어낼 수 있다는 것은, 락을 여기저기 뿌리고 요행을 바라는 대신 왜 그것이 발생하는지 추론하고 표적화된 예방책(보통 일관된 락 순서)을 고를 수 있음을 보여줍니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기