더북(TheBook)

게임 서버에서 교착 상태가 되면 발생하는 현상은 다음과 같습니다.

1. CPU 사용량이 현저히 낮거나 0%입니다. 동시접속자 수와 상관없습니다.

2. 클라이언트가 서버를 이용할 수 없습니다. 예를 들어 로그인을 못하거나 뭔가 요청을 보냈는데 응답이 오지 않습니다.

그러면 교착 상태를 일으켰을 때 디버거로 원인을 찾는 방법을 알아봅시다. 윈도에서 제공하는 임계 영역 기능인 CRITICAL_SECTION 내용을 디버거로 확인하면, 교착 상태가 어디서 시작되었는지 알 수 있습니다.

이를 예시 코드와 함께 살펴볼 텐데 먼저 CRITICAL_SECTION을 쓰는 방법부터 알아봅시다.

• 임계 영역 생성은 InitializeCriticalSectionEx로 합니다. 이때 CRITICAL_SECTION 객체가 생성됩니다.

• 임계 영역 제거는 DeleteCriticalSection으로 합니다.

• 임계 영역 잠금은 EnterCriticalSection으로 합니다.

• 임계 영역 잠금 해제는 LeaveCriticalSection으로 합니다.

CRITICAL_SECTION 객체를 std::mutexlock_guard처럼 단순하게 쓸 수 있게 클래스로 감쌉시다. std::mutex에 준하는 것으로 CriticalSection 클래스를 만들고, lock_guard에 준하는 것으로 CriticalSectionLock을 만들어 줍니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.