c# autoresetevent 예제

아래 예제에서는 두 개의 별도 스레드에서 작업하는 두 가지 메서드 (Method1, Method2)가 있습니다. 그리고 이 두 가지 방법은 주 스레드가 작업을 계속하기를 기다리고 있습니다. 작업자 스레드를 업데이트하려는 콘텐츠인 txtMessage라는 텍스트 상자가 있는 창이 있다고 가정하면 다음 예제에서는 AutoResetEvent를 사용하여 한 번에 하나의 스레드를 릴리스하는 방법을 보여 주며, 기본 cl에서 설정 메서드를 호출합니다. 입력 키를 누를 때마다 이 예제에서는 신호된 상태에서 생성된 AutoResetEvent에서 대기하는 세 개의 스레드를 시작합니다. AutoResetEvent가 이미 신호 된 상태에 있기 때문에 첫 번째 스레드는 즉시 해제됩니다. 이렇게 하면 AutoResetEvent가 신호가 없는 상태로 재설정되므로 후속 스레드가 차단됩니다. 차단된 스레드는 Enter 키를 눌러 사용자가 한 번에 하나씩 해제할 때까지 해제되지 않습니다. 두 스레드가 시작되는 작은 예를 살펴보겠습니다. 첫 번째 스레드는 시간 동안 실행된 다음 신호가 없는 상태에서 시작된 AutoResetEvent를 신호(set 호출)합니다. 그런 다음 두 번째 스레드가 AutoResetEvent가 신호를 받을 때까지 기다립니다.

두 번째 스레드는 두 번째 자동 재설정 이벤트도 기다립니다. 유일한 차이점은 두 번째 AutoResetEvent 신호 된 상태에서 시작, 그래서이 기다릴 필요가 없습니다. 솔직히 말해서, 뮤텍스가 .NET에 배치되는 원칙적 사용은 앞에서 언급한 것입니다 – 응용 프로그램의 다른 인스턴스가 이미 실행 중임을 감지합니다. 대부분의 사람들은 이러한 수준의 프로세스 간 통신이 필요하지 않습니다. 다른 용도는 WaitHandles 집합 중 하나 또는 전부가 해제될 때까지 차단할 수 있도록 하는 것입니다. 모니터가 충분히 좋은 다른 목적을 위해, 나는 그것을 사용하는 것이 좋습니다 – 특히 C #에는 특히 이를 지원하기 위해 lock 문이 있습니다. 그러나 실행 중인 응용 프로그램을 검색하는 예는 다음과 같습니다. 다행히도 대안이 있습니다. SignalAndWait의 경우, 대기열 점프 의미체계가 필요한 경우는 드물다: 예를 들어, 랑데부 예제에서는 첫 번째 대기 핸들에서 Set을 호출한 다음 다른 한 번WaitOne을 호출하는 것이 유효합니다.

집결. 장벽 클래스에서는 스레드 랑데부를 구현하기 위한 또 다른 옵션을 살펴보겠습니다.