TLS 질문드립니다.
34
2 câu hỏi đã được viết
static ThreadLocal<string> tl = new(()=> { return "dd"; });
이렇게 변수 선언을 영상과 같이 return을 받게 되는 형태로 만들어 졌을 시에 Thread에서
Console.WriteLine(tl.Value); 이렇게 최초로 tl.Value를 출력해보면 중단점을 걸었을시에 영상에서 설명 해주신 것과 같이 null값이 들어가게 됩니다. 그런데 궁금한건 그렇다면 Console.WriteLine(tl.Value); 이것의 콘솔에서의 실행 결과는 Null이 떠야하는 것 아닌가요?
Câu trả lời 2
0
안녕하세요, 인프런 AI 인턴입니다. 김동현님.
질문해 주신 ThreadLocal에 관한 부분에 대해 설명드리겠습니다.
ThreadLocal<T>는 각 스레드에 고유한 데이터를 저장할 수 있는 방법을 제공하는 클래스입니다. 사용자가 정의한 함수를 통해 초기값을 설정할 수 있으며, 각 스레드는 이 초기화 함수를 호출하여 자신의 고유한 데이터를 설정합니다.
질문주신 코드에서 static ThreadLocal<string> tl = new(() => { return "dd"; });는 각 스레드가 tl.Value를 처음 호출할 때 “dd”라는 값을 할당받도록 하는 것입니다.
주목할 부분은
tl.Value를 처음 접근할 때 초기화 함수가 실행된다는 것입니다. 따라서Console.WriteLine(tl.Value);호출 시, 만약 이전에 다른 스레드에서tl.Value에 접근한 적이 없다면, 그 스레드에는 처음으로 “dd”가 할당되고 출력됩니다.초기화 함수가 실행되지 않는 상황이라면, 특정 스레드에서
tl.Value를 처음 접근한 것이 아닌 경우 또는 특정 구조의 코드가 있을 때 null을 반환할 수 있습니다. 하지만, 많은 경우 직접적인 콘솔 출력에서는 초기화 이후의 값을 보게 됩니다.
아래 두 개의 링크에서 더욱 깊이 있는 TLS와 관련된 내용을 참고할 수 있습니다:
이 링크들은 TLS의 작동 방식과 초기화 내용에 대해 자세한 설명을 제공하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
39
2
Unity Span
0
66
2
XML, Dll 차이점
0
99
2
Session 질문입니다
0
74
1
Write Read 커서 키워드
0
69
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
65
2
네트워크 Send 전담 스레드 배치
0
94
2
UnhandledException 으로 서버 터지는 경우
0
82
2
컨텐츠 단, 엔진 단
0
100
1
질문 있습니다
0
73
2
C# 게임서버 3D MMORPG
0
141
2
유니티6 버전
0
94
2
receive하는 부분과 send하는 부분의 차이
0
128
2
커서의 위치의 중요성
0
99
2
C++ 전혀 모르는데 C# 서버
0
164
2
강의에 질문이 있습니다
0
83
2
멀티스레드 이해도 질문
0
90
1
500 vs 500
0
122
3
OnAcceptHandler 액션 함수
0
57
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
185
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
78
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
100
1
스핀락 질문.
0
104
2
안녕하세요 취업 학원 관련해서 문의드립니다.
0
174
2

