데드락 현상이란?
이 질문은 내가 여기저기 입사지원을 하고 면접을 보고 시험을 볼 때마다 매번 나왔던 질문과 문제들이다. 처음 한번은 이 문제에 대답을 못했고 그다음 다시 공부한 다음 다음번부터는 잘 대답했다.
신기한건 이 질문은 내가 면접을 본 몇군데 회사의 기술면접, 실기, 필기시험 때마다 매번 나온 문제였다. 프로그래머라면 반드시 알아야할 문제라고 생각해두자.
데드락 현상은 교착 상대라고도 하는데 예를 들어, A와 B라는 두개의 스레드가 있을 때 A 스레드는 B의 실행결과를 받아야만 종료할 수 있고 B 스레드는 A 스레드의 실행결과를 받아야만 종료할 수 있다면 두개의 스레드는 영원히 종료될 수 없고 죽지 않는 스레드로 영원히 남게 된다. 이런 현상을 데드락 현상이라고 한다.
한줄로 대답하자면 두 스레드가 서로의 실행결과를 무한히 기다리는 현상 이라고 답할 수 있을 것 같다.
특히 모 게임회사에서 네트워크 게임을 만들 때 데드락 현상에 빠지지 않았느냐고 물어봤는데 아직까지는 그런적이 없다고 말했더니 면접관분이 갸우뚱하셨다. 이 문제에 대해 선생님께 질문 해본 결과 윈도우소켓이 알아서 처리하기 때문에 그런 현상이 안 생겼던 것이라고 답해주셨는데 아직 잘 이해가 가지 않는다. 검색해봐도 이런 내용에 대한 답은 찾을 수 없는데 계속 더 공부해봐야 할만한 내용인 것 같다.