그냥 전역변수랑 TLS랑 뭐가 다른지 아직도 모르겠어요
static string ThreadName;
이거는 일반 전역변수인데 값을 공유한다면서 왜 값이 안바뀌나요???
static ThreadLocal<string> ThreadName
이거는 TLS이고, 모든 스레드가 전역에 고유한 공간을 가져서
이름이 바뀔수 있다는 거 맞나요?... 전역인데 다른스레드가 접근 못하는 건가요?
근데 그럴거면 스택영역 쓰지 굳이 왜 전역변수로 만들어서 쓰나요...? DB나 게임 로직에서 뽑아서 쓸수 있게 하려고 전역에다 놓는건가요? (??????)
답변 1
7
전역(정적static) : 누구나 접근 가능
스택 : 현재 쓰레드만 접근 가능 BUT 함수가 끝나면 폭파되는 공간
TLS : 스택처럼 현재 쓰레드만 접근 가능 BUT 함수가 호출 완료되도 여전히 유효한 공간
이렇게 구분할 수가 있겠습니다.
즉 쓰레드끼리 경합이 일어나지 않고 안전하면서도,
반영구적으로 안전히 사용할 수 있는 공간이라는 것이죠.
0
헉 정말 감사합니다... 이제 그부분은 이해됐습니다!
근데 일반 전역변수인 static string ThreadName; 이 부분으로 바꿔서 실행하면 출력으로 이름이 모두 똑같이 나오는데...
누구나 접근이 가능한데 왜 스레드마다 접근해서 이름을 못바꾸고 다 똑같은 이름으로 나오나요 ....? 출력하는 시점이 다 다를텐데 값도 다르게 나와야 하는거 아닌가요??
왕기초 질문이라 죄송합니다...ㅜ
0
쓰레드마다 접근해서 이름을 바꿀 수 있습니다.
문제는 내가 바꾼 데이터가 모두한테 동일하게 보이는 것이죠.
[HB님의 아이디를 이제부터 AB라고 명하노라!]라고 하면
모든 사람들이 AB로 이해하는 그런 느낌입니다.
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





