VisualStudio/C#

[C#서버][개념] 임계영역(크리티컬섹션)상호배제 - Moniter, lock

usingsystem 2022. 10. 26. 14:19
728x90

Moniter, lock중 lock사용 추천

Moniter(잘사용안함)

 static int number = 0;
        static object _obj = new object();
        static void Thread_1()
        {
            for (int i = 0; i < 100000; i++)
            {
                try
                {
                    Monitor.Enter(_obj);
                    number++;
                }
                finally // 데드락 예방
                {
                    Monitor.Exit(_obj);
                }
            }
        }

        static void Thread_2()
        {
            for (int i = 0; i < 100000; i++)
            {
                try
                {
                    Monitor.Enter(_obj);
                    number--;
                }
                finally // 데드락 예방
                {
                    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);
        }

lock(보편적)

    static void Thread_1()
        {
            for (int i = 0; i < 100000; i++)
            {
                lock (_obj)
                {
                    number++;
                }
            }
        }

        static void Thread_2()
        {
            for (int i = 0; i < 100000; i++)
            {
                lock (_obj)
                {
                    number++;
                }
            }
        }
728x90