728x90

주요 인터페이스 개념

생상자에 true/false 값으로 Set/Reset 여부를 지정할 수 있음

Set : 차단기를 올린다. 차가 지나 갈수 있음. (스레드 진행)

WaitOne : 차단기가 열리기까지 기다린다. 열려 있으면 차가 지나가고 아니라면 기다린다.

Reset : 차단기를 내린다. 이후 차는 다시 차단기가 올라가기(Set)까지 지나 갈 수 없다.

 

ManualResetEvent Vs AutoResetEvent

AutoResetEvent는 WaitOne 호출되고 바로 Reset 호출된다

반면, ManulResetEvent는 WaitOne 이후에 명시적으로 Reset을 호출해야 한다.

 

테스트 코드

 class Program
    {
        static ManualResetEvent event1 = new ManualResetEvent(true);

        static void Main(string[] args)
        {

            Timer timer = new Timer();

            timer.Interval = 1000;
            timer.Elapsed += Timer_Elapsed;
            timer.Start();

            while(true)
            {

            }
        }

        private static void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            event1.WaitOne();
            event1.Reset();

            //Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
            DateTime now = DateTime.Now;

            Random ran = new Random();
            Thread.Sleep(ran.Next(0, 10000));

            Console.WriteLine(now);

            event1.Set();
        }
    }

 

728x90

+ Recent posts