Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

For me

[Server] Lock - 2 본문

Server/Study

[Server] Lock - 2

GiveZero 2023. 4. 26. 14:43

DeadLock

상황

using System;

namespace Server
{

    class SessionManager
    {
        private static object _lock = new object();

        public static void SessionTest()
        {
            lock (_lock)
            {
                
            }
        }
        
        public static void Test()
        {
            lock (_lock)
            {
                UserManager.Test();
            }
        }
    }

    class UserManager
    {
        private static object _lock = new object();

        public static void UserTest()
        {
            lock (_lock)
            {

            }
        }

        public static void Test()
        {
            lock (_lock)
            {
                SessionManager.SessionTest();
            }
        }
    }
    class Program
    {
        private static int number = 0;
        private static object _obj = new Object();
        
        static void Thread1()
        {
            for (int i = 0; i < 10000; i++)
            {
                SessionManager.Test();
            }
        }

        static void Thread2()
        {
            for (int i = 0; i < 10000; i++)
            {
                UserManager.Test();
            }
        }
        
        static void Main(string[] args)
        {
            Task t1 = new Task(Thread1);
            Task t2 = new Task(Thread2);
            t1.Start();
            t2.Start();

            Task.WaitAll(t1, t2);

            Console.WriteLine(number);

        }
    }
}

=> 빠져나오지 못함 DeadLock 발생

 

해결방안

1) FastLock 클래스 구현 (id 추적)

 

하지만.. DeadLock은 완전히 막을 수 없음

 

 

 

'Server > Study' 카테고리의 다른 글

[Server] Context Switching  (0) 2023.04.26
[Server] Lock - 3 (SpinLock)  (0) 2023.04.26
[Server] Lock - 1  (0) 2023.04.26
[Server] Interlocked  (1) 2023.04.26
[Server] MemoryBarrier  (0) 2023.04.25