inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Thread Local Storage

그냥 전역변수랑 TLS랑 뭐가 다른지 아직도 모르겠어요

해결된 질문

482

HB

작성한 질문수 12

1

static string ThreadName;

이거는 일반 전역변수인데 값을 공유한다면서 왜 값이 안바뀌나요???

 

static ThreadLocal<string> ThreadName

이거는 TLS이고, 모든 스레드가 전역에 고유한 공간을 가져서

이름이 바뀔수 있다는 거 맞나요?... 전역인데 다른스레드가 접근 못하는 건가요?

 

근데 그럴거면 스택영역 쓰지 굳이 왜 전역변수로 만들어서 쓰나요...? DB나 게임 로직에서 뽑아서 쓸수 있게 하려고 전역에다 놓는건가요? (??????)

 

 

C# unity network

답변 1

7

Rookiss

전역(정적static) : 누구나 접근 가능
스택 : 현재 쓰레드만 접근 가능 BUT 함수가 끝나면 폭파되는 공간
TLS : 스택처럼 현재 쓰레드만 접근 가능 BUT 함수가 호출 완료되도 여전히 유효한 공간

이렇게 구분할 수가 있겠습니다.
즉 쓰레드끼리 경합이 일어나지 않고 안전하면서도,
반영구적으로 안전히 사용할 수 있는 공간이라는 것이죠.

0

HB

헉 정말 감사합니다... 이제 그부분은 이해됐습니다!

근데 일반 전역변수인 static string ThreadName; 이 부분으로 바꿔서 실행하면 출력으로 이름이 모두 똑같이 나오는데...

누구나 접근이 가능한데 왜 스레드마다 접근해서 이름을 못바꾸고 다 똑같은 이름으로 나오나요 ....? 출력하는 시점이 다 다를텐데 값도 다르게 나와야 하는거 아닌가요??

왕기초 질문이라 죄송합니다...ㅜ

0

Rookiss

쓰레드마다 접근해서 이름을 바꿀 수 있습니다.
문제는 내가 바꾼 데이터가 모두한테 동일하게 보이는 것이죠.
[HB님의 아이디를 이제부터 AB라고 명하노라!]라고 하면
모든 사람들이 AB로 이해하는 그런 느낌입니다.

0

HB

감사합니다!!

TLS 질문드립니다.

0

43

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

46

2

Unity Span

0

76

2

XML, Dll 차이점

0

105

2

Session 질문입니다

0

79

1

Write Read 커서 키워드

0

76

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

70

2

네트워크 Send 전담 스레드 배치

0

98

2

UnhandledException 으로 서버 터지는 경우

0

85

2

컨텐츠 단, 엔진 단

0

105

1

질문 있습니다

0

77

2

C# 게임서버 3D MMORPG

0

145

2

유니티6 버전

0

97

2

receive하는 부분과 send하는 부분의 차이

0

134

2

커서의 위치의 중요성

0

103

2

C++ 전혀 모르는데 C# 서버

0

169

2

강의에 질문이 있습니다

0

86

2

멀티스레드 이해도 질문

0

95

1

500 vs 500

0

130

3

OnAcceptHandler 액션 함수

0

61

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

191

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

82

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

106

1

스핀락 질문.

0

110

2