멀티스레드가 참 어려운 이유는 뭐 하나를 해결했다 싶으면 또 다른데서 뭔가가 터진다는 점이다.
이전에 메세지, 패킷을 날리는 부분에서 잘못한 부분은 동기화 문제도 아니었고 로직 문제였기 때문에 차라리 나았다.
지금은 동기화와 관련한 문제가 생겨서 이 부분을 해결해야 하는 상황이다.
이동이나 공격 관련해서 메시지가 오고 가는 것은 이제 문제가 없다.
다만 이동 중에 3개의 스레드에서 동시에 락을 얻으려는 상황이 생기면서 데드락이 발생하는 문제가 있다.
아마 어딘가에서 잘못한 것이 확실하기 때문에 이 부분을 해결해야만 한다.
분명히 어느 정도 흐름 선에서는 이게 맞겠다는 결론이 섰고 그걸 구현을 하는 것까지는 좋다.
단지 실제로 구동을 했을 때는 내 생각처럼 되지 않는다는 것이 문제다.
멀티스레드로 뭔가를 만들고 잘 돌아갈 때는 좋지만 뭔가 터질 때 이걸 잡는 것이 참 쉽지가 않다.
그래서 멀티스레드 환경으로 뭔가를 구현할 때는 구현하는 것보다 디버깅을 잘해야된다는 것을 체감하고 있다.
일단 어떤 상황에서 문제가 되었는지 그 흐름부터 파악을 해봐야 할 것 같다.
분명히 주말에도 일찍 자기로 했는데... 이걸 해결하기 전까지는 찝찝해서 잠도 안올 것 같다.