인프런 커뮤니티 질문&답변
Remove함수의 _lock 설정
해결된 질문
작성
·
302
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
Rookiss
지식공유자
멀티쓰레드라고 항상 문제가 되는 것은 아니고
공유하는, 즉 동시에 접근할 수 있는 데이터에 한해서 문제가 됩니다.
여기서 공유라 함은 힙이나 static 영역에 있는 데이터이고,
스택은 별다른 문제가 없습니다.
함수가 호출 될 때, 호출 인자 (여기서는 int objectId)는
스택(혹은 레지스터)에 저장되는데,
쓰레드마다 스택 영역은 고유하기 때문에 문제가 없습니다.




