인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Better Turtle님의 프로필 이미지
Better Turtle

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

락프리큐의 oldTail = _tail.exchange(dummy) 의 의미

작성

·

225

0

안녕하세요. 강의 정말 도움 많이 되고 있습니다.
그래서 빠짐없이 가져갈려고 노력 중이에요!

질문 본론으로,


oldTail 자체가 이미 이전 _tail을 지니고 있는데,
왜 저 부분에서 다시한번 oldTail = _tail을 받는지 모르겠습니다.

제 생각이 맞다면 exchange 없이 store로도 되야하는데,
메모리가 줄줄 새더라고요.. ㅠㅠ(2푸쉬,3팝 테스팅)


락프리큐는 10번 넘게보고, 현재 마지막으로 논리대로 재구현 해보는 중이고,,
이것만 이해되면 넘어갈 수 있습니다 ㅠㅠ..

 

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

oldTail 자체가 이미 이전 _tail을 지니고 있는데,

->
라고는 하나 CountedNodePtr은 ptr뿐 아니라 externalCount도 들고 있습니다.
ptr이나 externalCount가 바뀐다면 다시 갱신이 필요해질 수도 있는 것이죠.

Better Turtle님의 프로필 이미지
Better Turtle
질문자

답변보고 몇시간 고민하다가 갑자기 빵! 알게됐습니다!
뭔가 알듯말듯 가물가물 했습니다.

_tail에 dummy 값이 들어오기 이전에는,
소유권이라는 부분에서 이미 데이터 접근은 쓰레드 독점? 됐다고 생각했는데,

데이터는 쓰레드가 차지했을지라도, externalCount는 여전히 밖에서 건드릴 수 있다.
oldTail을 확실히 독점화? 잠궜을 순간에 최신화된 externalCount가 필요하네요!

유도해주셔서 정말 감사합니다.
몇가지 실험을 더 해보면서 재구현 해봐야 겠어요 ㅎㅎ

검색을 위해 글 제목은 바꾸겠습니다 ㅎㅎ

Better Turtle님의 프로필 이미지
Better Turtle

작성한 질문수

질문하기