그리고 플레이어 행동에 대한 처리는 각 방을 잠근 후에 합니다. 게임 서버에서 플레이어 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. ); room.DoSomething(playerID); Unlock(room. ); }
멀티스레드 게임 서버를 만들 때 크게 주의할 점은 시리얼 병목과 교착 상태입니다. 특히 파일을 액세스할 때 자주 잠그는 뮤텍스를 잠근 채로 액세스하는 경우 성능 저하가 자주 발생합니다.