inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

_popCount에 관한 질문입니다.

해결됨

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

지금 해당 코드에 대해서 4번째 의심하고있는 학생입니다. 찾아보니 유사한 질문이 있음에도 이해가 되질 않아 먼저 해당 글부터 링크 걸어두겠습니다. https://www.inflearn.com/questions/365349 _pendingList와 _popCount를 atomic으로 선언해서 사용하고 있는 상황인데 if (_popCount == 1) { // 여기부터 Node* node = _pendingList.exchange(nullptr); // 이 사이에 if (--_popCount == 0) { DeleteNode(node); } else if (node) { ChainPendingNodeList(node); } delete oldHead; 저 주석 사이에 둘 이상의 스레드가 동시에 접근 할 수 있는 건가요? 그리고 접근 할 수 있어도, 혹은 다른 함수에서(ChainPendingNodeList) _pendingList에 접근을 시도해도 exchange 연산을 통해 분리해내는데 둘 이상의 스레드가 동시에 같은 포인터를 잡고있는 상황이 있을 수 있나요?

  • atomic
  • network
  • LockFreeStack
  • windows-server
  • MMORPG
장인석 댓글 1 좋아요 0 조회수 459

compare_exchange_strong과 compare_exchange_weak

해결됨

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

compare_exchange에 해당하는 두가지 함수가 있기에 궁금하여 해당 내용을 찾아보았지만 이해가 가지 않습니다. https://cplusplus.com/reference/atomic/atomic/compare_exchange_strong/ Unlike compare_exchange_weak , this strong version is required to always return true when expected indeed compares equal to the contained object , not allowing spurious failures . However, on certain machines, and for certain algorithms that check this in a loop, compare_exchange_weak may lead to significantly better performance. 1) spurious failures? weak는 해당 오류가 어떻게 나올 수 있다는 걸까요? 2) weak와 strong을 선택하는 대표적인 기준은 무엇인가요?

  • c++
  • atomic
  • MMORPG
  • windows-server
  • compare_exchange
  • network
장인석 댓글 1 좋아요 0 조회수 1185

14분부터 나온 atomic 헤더와 C++버전에 관한 질문입니다.

해결됨

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

코드를 따라치면서 컴파일해보다가 14분 30즘에 나온 방식으로 atomic<int32> sum = 0; 으로 치고 컴파일 했을 때 -std=c++11과 -std=c++14로는 에러가 났습니다. 1) atomic은 C++ 버전 몇에서 표준화되고 추가되었나요? 2) 지금은 모든 Makefile의 CXXFLAGS에 -std=c++17를 추가해 통일시켜놨는데 앞으로 나오는 강의를 기준으로 C++17로 괜찮을까요? 아니면 해당강의에 맞는 추천버전이 있으신가요?

  • c++
  • network
  • atomic
  • c++17
  • MMORPG
  • windows-server
장인석 댓글 1 좋아요 0 조회수 372

Lock Free 관련하여 질문드립니다.

미해결

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

예제 코드를 보면 TryPop을 아래와 같이 구현하고 있습니다. bool TryPop ( T & outData ) { Node * oldHead = _head . load (); Node * expected = oldHead; Node * desired = oldHead -> Next ; while (oldHead && false == _head . compare_exchange_weak (expected, desired)) { // Null } if ( _head . load () == nullptr ) { return false ; } // 이하 생략 } 혹시 위의 코드에서 아래처럼 미리 Null check를 해도 무관할까요? bool TryPop ( T & outData ) { if ( _head . load () == nullptr ) { return false ; } Node * oldHead = _head . load (); Node * expected = oldHead; Node * desired = oldHead -> Next ; while ( false == _head . compare_exchange_weak (expected, desired)) { // Null } // 이하 생략 } 실제로 돌렸을 때는 문제가 없었는데, 혹시 제가 간과한 부분이 있나 하여 여쭤봅니다.

  • lock-free
  • network
  • atomic
  • MMORPG
  • windows-server
choiseonmun 댓글 1 좋아요 0 조회수 416

인기 태그

인프런 TOP Writers

주간 인기글