결국 또 밤을 샜다.
아무래도 해야 할 것이 있는데 이걸 그대로 내려놓고 잠에 들기에는 맘이 편하질 않았다.
새벽 동안 해결은 하지 못했지만, 생각을 하면서 어느 정도 해결해야 할 방향은 잡을 수 있었다.
학원에 도착해서 생각했던 것들을 다시 정리해가며 코드로 옮겨 구현을 했다.
결과는... 처음보다는 나아졌지만 또 다른 문제를 맞이했다.
데드락 문제는 해결이 됐지만 잔상이 남는 것이 문제였다.
점점 만들면서도 코드가 기괴해지는 것을 느끼면서 이게 맞는가 싶기도 했는데.
여기서 뭔가가 더 부족했던 모양이다.
이 부분의 원인을 찾아서 고치고 나면 또 어떤 문제가 생길지는 모르겠지만 말이다.
그래도 계속해서 개선되고 있다는 점에 의의를 두기로 했다.
오늘 수업에서는 락 프리에 대한 개념을 익히기 시작했다.
일단은 스택부터 만들어가면서 어떤 문제들이 있는지를 익혀가는 것이 중점이었다.
아직은 처음이다보니 개념적인 부분에서 막히지는 않았다.
다만 만들면서 멀티스레드 디버깅에 대한 것들을 하나씩 익히게 될 것이라는게 더 중요한 점이지만 말이다.
이전에도 멀티스레드에 대한 디버깅을 하면서 파일 입출력이나 콘솔 입출력이 큰 의미가 없다는 것을 알았다.
운좋게 여기서 걸리면 다행이겠지만, '입출력'이라는 말 그대로 이 둘도 결국 I/O이기 때문이다.
다시 말해서 입출력에 의해서도 동기화가 될 수 있기 때문에 오히려 디버깅에 방해가 되는 요소가 될 수 있다.
그래서 결론적으로는 디버깅을 할 때는 메모리를 직접 보면서 할 수밖에 없다는 것이고.
락 프리를 배우면서 메모리를 보고 어떤 문제가 있는지를 하나씩 짚어가는 것이 포인트가 되지 않을까 싶다.