UnityServer - ThreadLocalStorage

k_hyun·2022년 10월 30일
0

Unity_Server

목록 보기
12/32

Thread Local Storage

쓰레드끼리 경합이 일어나지 않고 안전하면서 ,반영구적으로 안전히 사용할 수 있는 공간이다.

using System;
using System.Reflection.Metadata.Ecma335;
using System.Threading;
using System.Threading.Tasks;

namespace SeverCore
{    
    internal class Program
    {
        static ThreadLocal<string> ThreadName = new ThreadLocal<string>(() => { return $"My Name is {Thread.CurrentThread.ManagedThreadId}"; });

        static void WhoAmI()
        {
            bool repeat = ThreadName.IsValueCreated;

            if (repeat)
            {
                Console.WriteLine(ThreadName.Value + "(repeat)");
            }
            else
            {            	
                Console.WriteLine(ThreadName.Value);
            }
        }

        static void Main(string[] args)
        {
            ThreadPool.SetMinThreads(1, 1);
            ThreadPool.SetMaxThreads(3, 3);
            Parallel.Invoke(WhoAmI, WhoAmI, WhoAmI, WhoAmI, WhoAmI, WhoAmI, WhoAmI, WhoAmI);

        }
    }
}

위의 줄에서 디버깅을 했을때 value의 값이 null이다.

하지만 아래 화면을 보면 value의 값이 갱신된 상태로 출력이 된다.

즉 값이 null인 경우

() => { return $"My Name is {Thread.CurrentThread.ManagedThreadId}"; }

이 부분이 실행됨을 확인하였다.

0개의 댓글