✋뽀-하! (뽀식 하이)
김뽀식의 팀은 신규 기능 추가를 위한 주간 미팅 중!
신입의 패기를 보여드릴 수 있도록 밤새 레퍼런스를 찾아 아이디어를 잔뜩 가져왔다!
하지만 예상과 달리 침묵만이 감도는 회의실...
그리고 미간이 굳어있는 개발팀의 얼굴...
박 선임: 그... 저희가 돌아가서 리소스 구조를 다시 봐야할 것 같은데 이 중 다수가 데드락 이슈 발생할 것 같아서...
김뽀식: (데드락...? 죽었고 잠겼어...?)
데드락(Deadlock)
두 가지의 요청의 조건이 충돌되어 서로를 기다리며 아무 것도 해결되지 않는 상태. 교착 상태라고도 한다.
친절한 뽀식 pick
더 알아두면 좋은 정보💡
삐용삐용! 데드락이 일어나는 4가지 조건을 예시로 알아보자!
- 상호배제(Mutual exclusion) : 하나의 자원을 두 개의 프로세스가 사용할 수 없는 상태
[예시] 김뽀식과 박뽀식은 함께 킥보드를 타고 싶지만 가지고 있는 킥보드는 1인용이고 1대 뿐이다.
2. 점유대기 (Hold and wait) : 먼저 자원을 선점한 프로세스가 자원을 붙잡고 놔주지 않는 상태
[예시] 1대 뿐인 킥보드를 김뽀식이 먼저 탔으나 다 타고 난 이후에도 박뽀식에게 주지 않는다.
3. 비선점(No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
[예시] 1대 뿐인 킥보드를 김뽀식이 너무나도 느리게 타지만 달리는 킥보드를 박뽀식이 뺏을 방법이 없다.
4. 순환대기(Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
[예시] 김뽀식은 박뽀식이 신호를 줘야 멈출 수 있지만 박뽀식은 김뽀식이 멈춰야 신호를 준다.
[더 읽어보면 좋을 글]