• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

Remove함수의 _lock 설정

20.09.22 18:42 작성 조회수 150

0

안녕하세요

다음과 같은 Remove함수에서 GetObjectTypeById에 대한 결과값을 받아올때 lock을 걸지 않으신 이유가 궁금합니다.

public bool Remove(int objectId)

{

GameObjectType objectType = GetObjectTypeById(objectId);

lock (_lock)

{

if(objectType == GameObjectType.Player)

return _players.Remove(objectId);

}

return false;

}

예를들어 멀티쓰레드 환경에서 Remove 함수가 두번 호출된다면  나중에 입력된 objectId에 대해서만 Remove만 실행되지 않을지 궁금합니다~

답변 1

답변을 작성해보세요.

3

멀티쓰레드라고 항상 문제가 되는 것은 아니고 
공유하는, 즉 동시에 접근할 수 있는 데이터에 한해서 문제가 됩니다.
여기서 공유라 함은 힙이나 static 영역에 있는 데이터이고,
스택은 별다른 문제가 없습니다.

함수가 호출 될 때, 호출 인자 (여기서는 int objectId)는
스택(혹은 레지스터)에 저장되는데,
쓰레드마다 스택 영역은 고유하기 때문에 문제가 없습니다.