작성
·
341
0
예제 코드를 보면 TryPop을 아래와 같이 구현하고 있습니다.
혹시 위의 코드에서 아래처럼 미리 Null check를 해도 무관할까요?
실제로 돌렸을 때는 문제가 없었는데, 혹시 제가 간과한 부분이 있나 하여 여쭤봅니다.
답변 1
0
if (oldHead == nullptr)
return false;
이렇게 되어 있을거 같은데,
혹시 몇 번 강의를 말씀하시는걸까요?
Node* oldHead = _head; 를 추출한 다음에
뒤늦게 if (oldHead == nullptr) 체크하는거랑
또 다시 if (_head == nullptr) 체크 하는거랑은 의미가 달라집니다.
사전에 검사를 해도 되긴 하지만, 그렇다고 뒷부분을 누락할 수는 또 없습니다.
데이터는 1개이고 2개의 쓰레드가 Pop을 한다면, CAS 경합을 통해 한 애는 성공하겠지만
다른 애는 실패할테니 그러면 return false가 뜨긴 떠야 할테니
뒷부분의 체크가 필요하겠죠.
절대 그렇지 않습니다 ㅎㅎㅎ
쓰더라도 라이브러리를 갖다 쓰지,
직접 만들 일은 사실상 없으니
그냥 공부하는 목적으로만 참고하시면 됩니다 ^^
참고로 전 LockFree를 극혐하는 파에 가깝습니다.
답변 감사드립니다 ㅎㅎㅎ..
아 추가적으로 질문이 하나 더 있는데, 유니코드는 잘 사용하지 않나요? 제프리 리처의 Windows via C/C++ 책을 좀 본 적이 있는데, Windows의 문자열 처리가 내부에서는 유니코드로 처리되어서 ANSI 코드는 약간의 성능 하락이 있다고 들어서요. 🤔
Lock Free Stack 구현하는 부분이었습니다. 네, 강사님이 말씀하신 것처럼 구현이 되어 있는데, 제가 코드를 옮기는 과정에서 복사 붙어넣기를 잘못했네요. 다시 질문을 드리자면..
원본 코드
구현 시도(?)하려는 코드
주석처럼 사전에 먼저 조건 검사를 해도 괜찮은지 궁금합니다.