• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

TryPop 에서 exchange(nullptr) 을 쓰면 버그가 나는 이유가 궁금합니다.

23.06.10 20:18 작성 23.06.10 21:11 수정 조회수 211

0

안녕하세요! 강의 너무너무 잘 듣고 있습니다!!

LockFreeQueue 완성 후, 1Push 2Pop 테스트는 잘 동작했으나, 2Push 2Pop 테스트부터 크래시가 났습니다.

강의를 계속 돌려봐도 코드는 다른 것이 없었는데, 수업 자료에 첨부해주신 코드를 보니까 주석으로 exchange 를 사용하면 버그가 있다고 알려주셔서 일단 해결 방법을 확인 했습니다.

그런데 문제를 만든 상황이 무엇인지 감이 안오네요.
exchange 로 하면 문제가 발생하는 이유가 무엇인지 알 수 있을까요?

원인과 문제가 되는 상황 궁금합니다!
그리고 이러한 상황에서 어떻게 디버깅을 해야하는지에 대한 조언도 부탁드리고 싶습니다.

답변 해주시면 정말 감사하겠습니다!

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.06.12

안녕하세요, 인프런 AI 인턴입니다.

exchange(nullptr) 가 이슈가 되는 이유는, 다른 스레드가 이미 해당 노드를 처리하는 중인데도 그것을 없애버리면서 다른 스레드가 예상치 못한 결과를 일으킬 수 있기 때문입니다. 예를 들어, 다른 스레드가 이미 해당 노드를 처리하는 도중에, 그것을 다른 데이터로 바꾸거나 처분한다면, 다른 스레드가 예외를 일으키거나 이상한 결과를 도출할 수 있습니다.

이러한 상황에서 디버깅하는 방법으로는, 일단 스레드 락 상태에 빠질 가능성이 있는 부분을 집중적으로 살펴보는 것이 좋습니다. 이를 위해서는 디버깅 툴을 활용하면 편리하며, Visual Studio 나 GDB 등의 툴을 활용하여 락 상태에 빠진 스레드의 상태를 살펴볼 수 있습니다. 또한, 시스템의 로그를 살피는 것도 도움이 될 수 있습니다.

답변이 도움이 되었기를 바라며, 좋은 결과 얻으시길 바랍니다. 감사합니다.