Remove함수의 _lock 설정
안녕하세요
다음과 같은 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)는
스택(혹은 레지스터)에 저장되는데,
쓰레드마다 스택 영역은 고유하기 때문에 문제가 없습니다.
MessagePack
0
85
1
본인 플레이어 이동 관련 질문
0
49
1
Part7 Part9 질문이 있습니다.
0
72
1
.
0
116
1
.
0
105
2
게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제
0
92
1
타일 팔레트 깔았는데도 안돼요
0
116
2
2D로 그냥 만들어도 되나요?
0
81
2
지난 강의와 이어지는게 맞을까요?
0
80
2
순환참조 문제로 인해 발생하는 문제는 없을까요?
0
162
2
유니티 클라와 C++서버연동
0
277
2
멀티플레이 테스트 환경 관련 질문입니다
0
207
3
강의 후반부에 순서 동기화를 위해 잡큐를 사용 안 한 부분 질문입니다!
0
150
2
코드 관련한 몇 가지 질문입니다!
0
153
2
3d 프로젝트 이동 동기화 관련
0
321
4
파트 7 스트레스 테스트 질문 드립니다.
1
189
2
맵 이동 방식
0
133
0
맵 이동 관련해서 질문드립니다.
0
91
1
안녕하세요 도저히 알 수 없는 오류가 나와서 질문드려요,,
0
201
2
안녕하세요. 일전에 질문 드린 포폴 준비 관련 질문의 추가 질문입니다!
0
160
1
[팁] 2024년 기준 버전 이슈?
0
455
1
SendBuffer.cs 삭제 후 대체 되는 부분의 장단점?
1
203
1
지금 강의의 유니티 클라를 IOCP 서버와 연동하는 것
0
336
2
PushAfter 사용 질문
0
192
1





