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

mafia7590님의 프로필 이미지
mafia7590

작성한 질문수

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

Lock-Free Stack #2

질문있습니다

작성

·

279

0

if (_popCount == 1) {

	Node* node = _pendingList.exchange(nullptr);
			
	if (--_popCount) {
				
                DeleteNodes(node);
	}
	else if (node) {
				
		ChainPendingNodeList(node);
	}
			
	delete oldHead;
	}

_popCount가 1인 상태가 나 혼자 삭제하고 있는 중이고 혼자 삭제하는 중이라면 삭제가 예약된 데이터들도 삭제한다고 이해를 했습니다. 삭제가 예약된 데이터들을 삭제를 할 수 있는지 체크하는 부분이 위에 있는 if(--popCount) 조건문으로 알고 있는데 여기서 --_popCount를 하면 _popCount가 0이 되어서 나 혼자 삭제하는 중이여도 다른 예약된 데이터들을 삭제를 할 수 없는거 아닌가요??

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. 답변드릴게요.

주어진 코드에서 --_popCount는 삭제 예약된 데이터가 여러 개인 경우에 대한 처리를 담당하는 부분입니다. _popCount 변수는 삭제 예약된 데이터의 개수를 나타내는 변수로, 초기 값은 예약된 데이터의 개수를 나타냅니다.

조건문 if (--_popCount)_popCount 값을 감소시킨 후, 감소한 값이 0이 아닌지를 확인하는 것입니다. 이렇게 처리한 이유는 _popCount가 0이 아닐 경우, 여전히 삭제 예약된 데이터가 남아있다는 의미이기 때문에 다른 예약된 데이터를 삭제하는 작업을 수행할 수 있습니다.

따라서 _popCount 값이 1일 때 --_popCount 연산을 통해 _popCount를 0으로 만든다면, 해당 조건문은 거짓이 되어 다음 else if 문이 실행되게 됩니다. 이렇게 되면 _popCount가 0이 되어도 삭제 예약된 데이터를 처리하는 작업이 가능해집니다.

결론적으로, _popCount가 1일 때 다른 예약된 데이터들을 삭제할 수 있는지 여부는 해당 코드 이후에서 처리되는 내용에 달려있습니다. _popCount 값이 0이더라도 다른 예약된 데이터를 처리할 작업이 있다면, 그에 맞게 코드를 추가해주어야 합니다.

추가적인 도움이 필요하시다면 언제든지 물어보세요. 좋은 하루 되세요!

mafia7590님의 프로필 이미지
mafia7590

작성한 질문수

질문하기