• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • Thread Local Storage (TLS): 쓰레드별 데이터 저장 방법
    2024년 03월 18일
    • 유니얼
    • 작성자
    • 2024.03.18.:22
    728x90

    C# 게임 서버 만들기

    멀티쓰레딩 환경에서 각 쓰레드가 자신만의 데이터 사본을 가지고 싶을 때가 있습니다. 이런 경우, Thread Local Storage (TLS)가 해결책이 될 수 있습니다. 이 글에서는 TLS의 개념, 사용법, 그리고 .NET에서 ThreadLocal<T>를 사용한 예제 코드를 통해 어떻게 활용할 수 있는지 알아보겠습니다.

    Thread Local Storage란?

    Thread Local Storage (TLS)는 각 쓰레드가 자신만의 고유한 데이터를 저장할 수 있도록 해주는 메커니즘입니다. TLS를 사용하면, 다른 쓰레드와 데이터를 공유하지 않고 각 쓰레드가 독립적으로 데이터를 관리할 수 있습니다. 이는 멀티쓰레딩 환경에서 데이터 무결성을 유지하고, 쓰레드 간의 데이터 충돌을 방지하는 데 도움이 됩니다.

    예제 코드

    .NET에서는 ThreadLocal<T> 클래스를 제공하여 TLS를 구현합니다. ThreadLocal<T>는 제네릭을 사용하여, 저장하고 싶은 데이터 타입을 지정할 수 있습니다. 각 쓰레드는 ThreadLocal<T> 인스턴스를 통해 값을 설정하거나 가져올 때 자신만의 고유한 값을 관리하게 됩니다.

     

    다음 예제는 각 쓰레드가 자신만의 카운터를 갖고, 이를 독립적으로 증가시키는 과정을 보여줍니다.

    using System;
    using System.Threading;
    
    class TLSDemo
    {
        // ThreadLocal<int> 인스턴스를 생성합니다. 각 쓰레드는 자신만의 카운터 값을 갖게 됩니다.
        private static ThreadLocal<int> _counter = new ThreadLocal<int>(() => 0);
    
        public static void Main()
        {
            Thread[] threads = new Thread[5];
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new Thread(() =>
                {
                    // 카운터를 10까지 증가시키며, 각 쓰레드는 독립적인 카운터 값을 갖습니다.
                    for (int j = 0; j <= 10; j++)
                    {
                        _counter.Value++;
                        Console.WriteLine($"Thread ID: {Thread.CurrentThread.ManagedThreadId}, Counter: {_counter.Value}");
                    }
                });
                threads[i].Start();
            }
    
            foreach (Thread t in threads)
            {
                t.Join();
            }
        }
    }

    이 예제에서 ThreadLocal<int>는 각 쓰레드에게 자신만의 int 값을 제공합니다. 쓰레드는 이 값을 독립적으로 증가시킬 수 있으며, 다른 쓰레드의 값에 영향을 받지 않습니다. 결과적으로, 각 쓰레드는 자신만의 카운터를 1부터 10까지 증가시키는 작업을 수행합니다.

    결론

    Thread Local Storage (TLS)는 멀티쓰레딩 환경에서 각 쓰레드가 독립적인 데이터를 관리해야 할 때 매우 유용합니다. .NET의 ThreadLocal<T> 클래스를 사용하면, 간단하게 TLS를 구현할 수 있습니다. TLS를 활용하면 데이터 무결성을 유지하고, 쓰레드 간의 데이터 충돌을 방지할 수 있어 멀티쓰레딩 애플리케이션의 안정성과 성능을 향상시킬 수 있습니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바