AutoResetEvent(Boolean) 생성자 (System.Threading) | 마이크로소프트 런 (microsoft.com)
신호를 받으면 대기 중인 단일 스레드를 해제한 후 자동으로 다시 설정되는 스레드 동기화 이벤트
(A thread synchronization event that, when signaled, resets automatically after releasing a single waiting thread.)
public AutoResetEvent (bool initialState); |
Parameters : Boolean initialState true to set the initial state to signaled; false to set the initial state to non-signaled. |
아래 예제는 ReaderThread를 생성하고 시작을 한다.
for 루프를 돌면서 number에 i 값을 넣고 myResetEvent.Set();을 호출해서 Thread에 myResetEvent.WaitOne();을 이용해서 Blocking 되어 있는 것을 해제 한다.
using System;
using System.Threading;
namespace AutoResetEvent_Examples
{
class MyMainClass
{
//Initially not signaled.
const int numIterations = 100;
static AutoResetEvent myResetEvent = new AutoResetEvent(false);
static int number;
static void Main()
{
//Create and start the reader thread.
Thread myReaderThread = new Thread(new ThreadStart(MyReadThreadProc));
myReaderThread.Name = "ReaderThread";
myReaderThread.Start();
for(int i = 1; i <= numIterations; i++)
{
Console.WriteLine("Writer thread writing value: {0}", i);
number = i;
//Signal that a value has been written.
myResetEvent.Set();//Set 함수를 호출하면 Thread의 WaitOne()이 해제 되어 넘어간다.
//Give the Reader thread an opportunity to act.
Thread.Sleep(1);
}
//Terminate the reader thread.
myReaderThread.Abort();
}
static void MyReadThreadProc()
{
while(true)
{
//The value will not be read until the writer has written
// at least once since the last read.
myResetEvent.WaitOne();//위의 Main()함수에서 Set이 호출될 때 lock이 해제 된다.
Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number);
}
}
}
}
AutoResetEvent는 WaitOne() 함수로 Lock을 하고 Set() 함수로 Unlock 처리 하는 이벤트이다.
'.NET' 카테고리의 다른 글
C# DataSet 클래스의 ReadXml 함수로 XML 파싱하기 (0) | 2024.01.05 |
---|---|
C# PropertyGrid Attribute 종류 정리 (0) | 2023.12.26 |
System.Threading Monitor Class 예제 분석 (1) | 2023.10.24 |
C# delegate event, EventHandler 사용 예제 (0) | 2023.06.03 |
Network Interface Status Event (0) | 2023.05.24 |