본문 바로가기
서버

Lock 기초

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

namespace SeverCore
{
    internal class Program
    {
        static int number = 0;
        static object _obj = new object();
        static void Thread_1()
        {
            for (int i = 0; i < 100000; i++)
            {
                //상호 배제 Mutual Exclusive
                Monitor.Enter(_obj);//문을 잠구는 행위 
                number++;
                Monitor.Exit(_obj);//잠금 해제 
            }

        }
        static void Thread_2()
        {
            for (int i = 0; i < 100000; i++)
            {
                Monitor.Enter(_obj);
                {
                    number--;
                    return;//이런 경우 DeadLock
                }
                Monitor.Exit(_obj);
            }
        }
        static void Main(string[] args)
        {
            Task t1 = new Task(Thread_1);
            Task t2 = new Task(Thread_2);
            t1.Start();
            t2.Start();

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

 

DeadLock을 방지할수있는 방법

반응형

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

SpinLock  (0) 2024.07.30
DeadLock  (0) 2024.07.30
메모리 배리어  (1) 2024.07.26
디버그 최적화  (0) 2024.07.26
캐시  (0) 2024.07.26