본문 바로가기
서버

DeadLock

by Mostlove 2024. 7. 30.
728x90
반응형

namespace SeverCore
{
    class SessionManager
    {
        static object _lock = new object();
        public static void TestSession()
        {
            lock (_lock)
            {

            }
        }
        public static void Test() 
        {
            lock(_lock)
            {
                UserManager.TestUser();
            }
        }
    }
    class UserManager
    {
        static object _lock = new object();

        public static void Test()
        {
            lock (_lock)
            {
                SessionManager.TestSession();
            }
        }
        public static void TestUser()
        {
            lock (_lock)
            {
                
            }
        }
    }

    internal class Program
    {
        static int number = 0;
        static object _obj = new object();
        static void Thread_1()
        {
            for (int i = 0; i < 100000; i++)
            {
                SessionManager.Test();
            }

        }
        static void Thread_2()
        {
            for (int i = 0; i < 100000; i++)
            {
                UserManager.TestUser();
            }
        }
        static void Main(string[] args)
        {
            Task t1 = new Task(Thread_1);
            Task t2 = new Task(Thread_2);
            t1.Start();

            Thread.Sleep(1000);
            t2.Start();

            Task.WaitAll(t1, t2);
            Console.WriteLine(number) ;
        }
    }
}

데드락을 방지하기는 어렵지만 발생 이후 고치는 게 더 쉽다.

반응형

'서버' 카테고리의 다른 글

Context Switching  (0) 2024.08.06
SpinLock  (0) 2024.07.30
Lock 기초  (0) 2024.07.30
메모리 배리어  (1) 2024.07.26
디버그 최적화  (0) 2024.07.26