더북(TheBook)

그리고 플레이어 행동에 대한 처리는 각 방을 잠근 후에 합니다. 게임 서버에서 플레이어 A에 대한 처리를 할 때는 다음과 같이 작동합니다.

1. 공통 데이터(방 목록 등)를 잠급니다.

2. 플레이어 A가 들어 있는 방을 방 목록에서 찾습니다.

3. 공통 데이터를 잠금 해제합니다.

4. 찾은 방을 잠급니다.

5. 플레이어 A의 방 안에서 처리를 합니다.

6. 방을 잠금 해제합니다.

이 과정을 코드로 표현하면 다음과 같습니다.

MyGameServer.DoSomething(playerID)
{
  lock(m_critSec);
  room = m_roomList.find(player);
  Unlock(m_critSec);
 
  lock(room.m_critSec);
  room.DoSomething(playerID);
  Unlock(room.m_critSec);
}

멀티스레드 게임 서버를 만들 때 크게 주의할 점은 시리얼 병목과 교착 상태입니다. 특히 파일을 액세스할 때 자주 잠그는 뮤텍스를 잠근 채로 액세스하는 경우 성능 저하가 자주 발생합니다.

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