C#
ManualResetEvent 클래스

ManualResetEvent는 하나의 쓰레드만 통과시키고 닫는 AutoResetEvent와 달리, 한번 열리면 대기중이던 모든 쓰레드를 실행하게 하고 코드에서 수동으로 Reset()을 호출하여 문을 닫고 이후 도착한 쓰레드들을 다시 대기토록 한다. 아래는 여러 쓰레드의 실행을 중지시킨 후, ManualResetEvent로 신호를 보내 대기중이던 모든 쓰레들들을 한꺼번에 실행시키는 예제이다.

예제

using System;
using System.Threading;

namespace MultiThrdApp
{
    class Program
    {
        // ManualResetEvent 객체 필드
        static ManualResetEvent manualEvent = new ManualResetEvent(false);

        static void Main()
        {
            // 10개의 쓰레드 생성
            // 10개 쓰레드 모두 manualEvent.WaitOne(); 에서
            // 실행 중지후 대기중
            for (int i = 0; i < 10; i++)
            {
                new Thread(Run).Start(i);
            }

            // 메인쓰레드            
            Thread.Sleep(3000);

            // ManualResetEvent 객체 Set() 호출
            // 10개 쓰레드 모두 실행 계속함.
            manualEvent.Set(); 
        }

        static void Run(object id)
        {            
            Console.WriteLine("{0} in Wait", id);

            // ManualResetEvent 신호 대기
            manualEvent.WaitOne();                        

            Console.WriteLine("{0}: Done", id);
        }
    }
}



테스드 결과


본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.




Comment admin@*** 2/13/2017 5:32:45 PM
Comment lovedangyou@*** 8/8/2017 9:25:01 AM
Comment admin@*** 8/8/2017 2:17:00 PM
Comment cjh0206@*** 6/5/2020 12:44:25 AM
Comment admin@*** 6/5/2020 4:33:36 AM