UnitySever - DeadLock

k_hyun·2022년 10월 26일
0

Unity_Server

목록 보기
7/32

DeadLock


락이 걸렸는데 해제되지 못한 채로 유지되는것.

다른 스레드에서는 접근하지 못하고 영영 멈추게됨.

그림 출처 : https://ozt88.tistory.com/35

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)
            {

            }
        }
    }
		static void Thread_1()
        {
            for(int i=0; i<10000; i++)
            {                
                SessionManager.Test();                              
            }
        }

        static void Thread_2()
        {
            for (int i = 0; i < 10000; i++)
            {              
                UserManager.Test();                
            }
        }

위의 두 스레드를 실행하면 영영 멈춘 상태로 남아있게 된다.


한 스레드에서는 여기서 작업이 멈춘 것을 확인하였다.

스레드2에서 UserManager에 lock을 걸고 TestSession을 실행해야 하는데 이미 lock이 사용중인 상황이다.


다른 스레드에서는 여기서 작업이 중단됨을 확인하였다.

스레드1에서 SessionManager의 lock을 걸고 TestUser()을 실행시키려 하는데 이미 lock이 사용되고 있는 상황이다.

0개의 댓글