인프런 커뮤니티 질문&답변
TLS 질문드립니다.
작성
·
16
0
static ThreadLocal<string> tl = new(()=> { return "dd"; });
이렇게 변수 선언을 영상과 같이 return을 받게 되는 형태로 만들어 졌을 시에 Thread에서
Console.WriteLine(tl.Value); 이렇게 최초로 tl.Value를 출력해보면 중단점을 걸었을시에 영상에서 설명 해주신 것과 같이 null값이 들어가게 됩니다. 그런데 궁금한건 그렇다면 Console.WriteLine(tl.Value); 이것의 콘솔에서의 실행 결과는 Null이 떠야하는 것 아닌가요?
퀴즈
멀티쓰레딩 개론에서 프로그램(프로세스)에 비유된 것은 무엇일까요?
CPU 코어
쓰레드
운영체제
레스토랑
답변 2
0
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의 작동 방식과 초기화 내용에 대해 자세한 설명을 제공하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





