강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김동현님의 프로필 이미지
김동현

작성한 질문수

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

Thread Local Storage

TLS 질문드립니다.

작성

·

16

0

static ThreadLocal<string> tl = new(()=> { return "dd"; });
이렇게 변수 선언을 영상과 같이 return을 받게 되는 형태로 만들어 졌을 시에 Thread에서

Console.WriteLine(tl.Value); 이렇게 최초로 tl.Value를 출력해보면 중단점을 걸었을시에 영상에서 설명 해주신 것과 같이 null값이 들어가게 됩니다. 그런데 궁금한건 그렇다면 Console.WriteLine(tl.Value); 이것의 콘솔에서의 실행 결과는 Null이 떠야하는 것 아닌가요?

퀴즈

41%나 틀려요. 한번 도전해보세요!

멀티쓰레딩 개론에서 프로그램(프로세스)에 비유된 것은 무엇일까요?

CPU 코어

쓰레드

운영체제

레스토랑

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

tl.Value 하는 '순간' 만들어지기 때문에 그렇습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김동현님.

질문해 주신 ThreadLocal에 관한 부분에 대해 설명드리겠습니다.

ThreadLocal<T>는 각 스레드에 고유한 데이터를 저장할 수 있는 방법을 제공하는 클래스입니다. 사용자가 정의한 함수를 통해 초기값을 설정할 수 있으며, 각 스레드는 이 초기화 함수를 호출하여 자신의 고유한 데이터를 설정합니다.

질문주신 코드에서 static ThreadLocal<string> tl = new(() => { return "dd"; });는 각 스레드가 tl.Value를 처음 호출할 때 “dd”라는 값을 할당받도록 하는 것입니다.

  1. 주목할 부분은 tl.Value를 처음 접근할 때 초기화 함수가 실행된다는 것입니다. 따라서 Console.WriteLine(tl.Value); 호출 시, 만약 이전에 다른 스레드에서 tl.Value에 접근한 적이 없다면, 그 스레드에는 처음으로 “dd”가 할당되고 출력됩니다.

  2. 초기화 함수가 실행되지 않는 상황이라면, 특정 스레드에서 tl.Value를 처음 접근한 것이 아닌 경우 또는 특정 구조의 코드가 있을 때 null을 반환할 수 있습니다. 하지만, 많은 경우 직접적인 콘솔 출력에서는 초기화 이후의 값을 보게 됩니다.

아래 두 개의 링크에서 더욱 깊이 있는 TLS와 관련된 내용을 참고할 수 있습니다:

이 링크들은 TLS의 작동 방식과 초기화 내용에 대해 자세한 설명을 제공하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김동현님의 프로필 이미지
김동현

작성한 질문수

질문하기