-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
해결됨
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만 실행되지 않을지 궁금합니다~
답변을 작성해보세요.
3
Rookiss
지식공유자2020.09.22
멀티쓰레드라고 항상 문제가 되는 것은 아니고
공유하는, 즉 동시에 접근할 수 있는 데이터에 한해서 문제가 됩니다.
여기서 공유라 함은 힙이나 static 영역에 있는 데이터이고,
스택은 별다른 문제가 없습니다.
함수가 호출 될 때, 호출 인자 (여기서는 int objectId)는
스택(혹은 레지스터)에 저장되는데,
쓰레드마다 스택 영역은 고유하기 때문에 문제가 없습니다.
답변 1