본문 바로가기
서버

AutoResetEvent

by Mostlove 2024. 8. 6.
728x90
반응형

using System;
using System.Threading;
using Systehttp://m.Threading.Tasks;
namespace ServerCore
{
    class Lock
    {
        //bool <- 커널
        AutoResetEvent _available = new AutoResetEvent(true);
        //ManualResetEvent _available = new ManualResetEvent(true);

        public void Acquire()
        {
            _available.WaitOne();//입장 시도 
            //_available.Reset(); //bool =false;문을 닫는다
        }
        public void Release()
        {
            _available.Set();//flag = true;문을 열어준다
        }
    }
    class Program
    {
        static int _num = 0;
        static Lock _lock = new Lock();
        static void Thread_1()
        {
            for(int i = 0; i < 10000; i++)
            {
                _lock.Acquire();
                _num++;
                _lock.Release();
            }
        }
        static void Thread_2()
        {
            for (int i = 0; i < 10000; i++)
            {
                _lock.Acquire();
                _num--;
                _lock.Release();
            }
        }
        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(_num);
        }
    }
}

using System;
using System.Threading;
using Systehttp://m.Threading.Tasks;
namespace ServerCore
{
    class Program
    {
        static int _num = 0;
        static Mutex _lock = new Mutex();
        static void Thread_1()
        {
            for (int i = 0; i < 1000000; i++)
            {
                _lock.WaitOne();
                _num++;
                _lock.ReleaseMutex();
            }
        }
        static void Thread_2()
        {
            for (int i = 0; i < 1000000; i++)
            {
                _lock.WaitOne();
                _num--;
                _lock.ReleaseMutex();
            }
        }
        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(_num);
        }
    }
}

 

반응형

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

ReaderWriterLock 구현  (0) 2024.08.06
ReaderWriterLock  (0) 2024.08.06
Context Switching  (0) 2024.08.06
SpinLock  (0) 2024.07.30
DeadLock  (0) 2024.07.30