namespace ServerCore
{
internal class Program
{
static ThreadLocal<string> ThreadId = new ThreadLocal<string>();
static void WhoamI()
{
ThreadId.Value = $"My Name is {Thread.CurrentThread.ManagedThreadId}";
Thread.Sleep(100);
Console.WriteLine($"다른 스레드 영향 주는지 확인. 진짜 id:{Thread.CurrentThread.ManagedThreadId} tls id: {ThreadId.Value}");
}
static void Main(string[] args)
{
Parallel.Invoke(WhoamI, WhoamI, WhoamI, WhoamI, WhoamI, WhoamI, WhoamI);
}
}
}
namespace ServerCore
{
internal class Program
{
// ThreadName이 세팅 안되었으면 넣어주고 아니면 원래 있던 값 그대로 사용
static ThreadLocal<string> ThreadId = new ThreadLocal<string>(() => { return $"My Name is {Thread.CurrentThread.ManagedThreadId}"; });
static void WhoamI()
{
// 이미 value가 세팅 되었는지 확인
bool repeated = ThreadId.IsValueCreated;
if(repeated)
Console.WriteLine($"{ThreadId.Value} is repeated");
else
Console.WriteLine(ThreadId.Value);
}
static void Main(string[] args)
{
ThreadPool.SetMinThreads(1, 1);
ThreadPool.SetMaxThreads(3, 3);
Parallel.Invoke(WhoamI, WhoamI, WhoamI, WhoamI, WhoamI, WhoamI, WhoamI);
}
}
}
'C# > 네트워크 관련' 카테고리의 다른 글
Socket 연결 실습 - 2 (0) | 2024.10.01 |
---|---|
Socket 연결 실습 (0) | 2024.09.29 |
ReaderWriterLock 구현 (2) | 2024.09.22 |
ReaderWriterLock 예제 (0) | 2024.09.20 |
SpinLock 예제 (1) | 2024.09.15 |