스레드 관련 개념 1. 스레드 동기화 ManualResetEvent Set() 메서드는 상태를 신호 상태로 설정합니다 Reset()를 신호 없음으로 설정하기 위해 WaitOne()은 신호가 올 때까지 차단하며, WaitOne을 호출할 때 신호가 있으면 차단하지 않습니다 AutoResetEvent ManualResetEvent와의 차이점은 AutoResetEvent.WaitOne()이 이벤트 객체의 상태를 자동으로 변경한다는 점입니다. 즉, AutoResetEvent.WaitOne() 실행 시 이벤트 상태가 변한다는 뜻입니다. 신호 - 신호 없음>; 신호가 없으면 신호가 >
example:
myResetEven.Set()은 실제로 스위치와 동등하며, set() 메서드가 실행되지 않으면 다음 waitOne()은 실행을 허용하기 위해 알림을 기다릴 수 없으므로 waitOne 이후의 문장은 실행되지 않습니다. 모니터 방법 Wait() Pulse() 메커니즘은 스레드 간 상호작용에 사용되며, 객체가 Monitor.Wait(를 방출하면) 해당 객체에 접근하는 스레드는 대기 상태를 유지합니다. 깨우는 신호가 올 때까지. Monitor.Pulse()는 대기 스레드에 신호를 보내는 데 사용됩니다. 즉, Monitor.Enter()와 Monitor.Exit() 사이의 중요한 영역에서 객체의 잠금을 해제하고 현재 스레드를 차단하기 위해 대기 상태에 있습니다.
Lock은 Mutex와 다릅니다 여러 스레드 간 잠금 동기화 Mutex 프로세스 간 다중 스레드 동기화 또는 여러 프로세스 동기화 .Net 멀티스레드 프로그래밍에서는 AutoResetEvent와 ManualResetEvent 클래스가 자주 사용되며, 사용법은 매우 유사하지만 차이점도 있습니다. Set 메서드는 신호를 송신 상태로 설정하고, Reset 메서드는 신호를 전송하지 않은 상태로 하며, WaitOne은 신호가 전송될 때까지 기다립니다. 구성자의 초기 상태는 매개변수 값으로 결정할 수 있으며, 참이면 차단 상태가 아니고, false는 차단 상태입니다. 스레드가 WaitOne 메서드를 호출하면, 스레드는 전송 상태에 있을 때 신호를 받고 계속 아래로 실행됩니다. 차이점은 호출 후 AutoResetEvent.WaitOne()은 한 번에 한 스레드만 들어갈 수 있게 하며, 스레드가 신호를 받으면 AutoResetEvent가 자동으로 신호를 no send 상태로 전환하며, WaitOne을 호출하는 다른 스레드들은 계속 대기만 할 수 있다는 점입니다. 즉, AutoResetEvent는 한 번에 한 스레드씩만 깨우며; ManualResetEvent는 여러 스레드를 깨울 수 있는데, 이는 한 스레드가 ManualResetEvent.Set() 메서드를 호출하면 WaitOne을 호출하는 다른 스레드들이 실행 계속 신호를 받고, ManualResetEvent는 자동으로 신호를 전송 중지로 설정하지 않기 때문입니다. 즉, ManualResetEvent.Reset() 메서드가 수동으로 호출되지 않는 한, ManualResetEvent는 신호를 유지하며 ManualResetEvent가 여러 스레드를 동시에 깨워 실행을 계속할 수 있습니다. |