CodeSOD: Lock 'Em Dead 노트

CodeSOD: Lock 'Em Dead

제공된 C++ 코드 스니펫은 Deadlock 예외에 대한 예외 처리기를 보여줍니다. 이 예외를 잡았을 때, 코드는 retry를 시도합니다. 그러나 retry는 표준 C++ 키워드가 아니며 매크로일 가능성이 높습니다. 작성자는 이 매크로가 goto 문을 사용하여 구현되었을 것으로 추측합니다.핵심 문제는 retry가 교착 상태를 해결할 것이라는 가정에 있습니다. 교착 상태는 두 개 이상의 스레드가 무기한 차단되어 각 스레드가 다른 스레드가 보유한 리소스를 기다릴 때 발생합니다. retry가 효과적이려면 교착 상태에 빠진 스레드가 현재 보유하고 있는 리소스를 해제해야 합니다.코드 작성자인 Kevin에 따르면, retry 매크로는 어떤 리소스도 해제하지 않습니다. 대신, 단순히 catch 블록의 시작 부분으로 점프합니다. 이는 스레드가 교착 상태 상황에 계속 갇혀 있음을 의미합니다.Kevin은 시스템이 이미 수많은 교착 상태로 고통받고 있다고 지적합니다. 컨설턴트가 리소스 액세스 순서를 재조정하고 뮤텍스 관련 문제를 식별하여 이러한 문제를 해결하기 위해 고용되었습니다. 컨설턴트의 retry 구현은 의도치 않게 더 많은 교착 상태를 도입한 것으로 보입니다. Kevin은 농담으로 컨설턴트가 자신의 교착 상태를 추가할 의도였을 수도 있다고 제안합니다.