작성
·
271
·
수정됨
0
안녕하세요! 강의 너무너무 잘 듣고 있습니다!!
LockFreeQueue 완성 후, 1Push 2Pop 테스트는 잘 동작했으나, 2Push 2Pop 테스트부터 크래시가 났습니다.
강의를 계속 돌려봐도 코드는 다른 것이 없었는데, 수업 자료에 첨부해주신 코드를 보니까 주석으로 exchange 를 사용하면 버그가 있다고 알려주셔서 일단 해결 방법을 확인 했습니다.
그런데 문제를 만든 상황이 무엇인지 감이 안오네요.
exchange 로 하면 문제가 발생하는 이유가 무엇인지 알 수 있을까요?
원인과 문제가 되는 상황 궁금합니다!
그리고 이러한 상황에서 어떻게 디버깅을 해야하는지에 대한 조언도 부탁드리고 싶습니다.
답변 해주시면 정말 감사하겠습니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
exchange(nullptr) 가 이슈가 되는 이유는, 다른 스레드가 이미 해당 노드를 처리하는 중인데도 그것을 없애버리면서 다른 스레드가 예상치 못한 결과를 일으킬 수 있기 때문입니다. 예를 들어, 다른 스레드가 이미 해당 노드를 처리하는 도중에, 그것을 다른 데이터로 바꾸거나 처분한다면, 다른 스레드가 예외를 일으키거나 이상한 결과를 도출할 수 있습니다.
이러한 상황에서 디버깅하는 방법으로는, 일단 스레드 락 상태에 빠질 가능성이 있는 부분을 집중적으로 살펴보는 것이 좋습니다. 이를 위해서는 디버깅 툴을 활용하면 편리하며, Visual Studio 나 GDB 등의 툴을 활용하여 락 상태에 빠진 스레드의 상태를 살펴볼 수 있습니다. 또한, 시스템의 로그를 살피는 것도 도움이 될 수 있습니다.
답변이 도움이 되었기를 바라며, 좋은 결과 얻으시길 바랍니다. 감사합니다.