Thread : 병행작업, 오래걸리는 작업, 네트워크송수신, DB작업 등
동시에 실행을 시킬때 병행적으로 같이 진행할수있다.
Load 안에 Thread 를 실행 시키면 Application.Run(new Form1()) -> LOAD - > Thread 순 진행
TIP : 입계영역이란 ?
공유리소스(Ex 전역 함수)에 Thread Safety 하게 접근하는 영역
C# 에서는 lock()키워드를 사용
// microsoft 가이드 참조
lock 문은 지정된 개체에 대한 상호 배제 잠금을 획득하여 명령문 블록을 실행한 다음, 잠금을 해제합니다. 잠금이 유지되는 동안 잠금을 보유하는 스레드는 잠금을 다시 획득하고 해제할 수 있습니다. 다른 스레드는 잠금을 획득할 수 없도록 차단되며 잠금이 해제될 때까지 대기합니다.
lock() 를 사용 하여 상호배재 잠금 진행 키워드 안에 원하는 Thread 공통변수를 사용하면 된다.
lock()키워드에 빠져나오면 상호배재가 해제가 되어 따로 해제를 하지 않아도 된다.
-- 주로 파일 읽고쓰기,네트워크전송수신,DB작업등등 사용
AutoResetEvent 이벤트
병렬로 Thread 작업이 가능하게 할경우 또는 여러개의Thread가 영향받지 않기 위해 자주 사용
AutoResetEvent autoResetEt = new AutoResetEvent(true);
autoResetEt.WaitOne();//신호를 받을 때 까지 대기하게됩니다.//생성자에 True 를 주면 첫번쨰신호는 받은상태로변경//두번쨰신호를 대기하는 상태.
autoResetEt.Set();// 신호를 보내기
Thread thread1 = null;
Thread thread2 = null;
AutoResetEvent autoResetEvent = new AutoResetEvent(true);
private void Form1_Load(object sender, EventArgs e)
{
try{
thread = new Thread(new ThreadStart(실행시킬 void));
thread.IsBackground = true;//UIThread가 종료될때 저희가만든 해당 쓰레드도종료가.
thread.Priority = ThreadPriority.Normal;//OS(운영체제)자원을 얼마나 자주사용.
thread.Start();
thread2 = new Thread(new ThreadStart(Work2));
thread2.IsBackground = true;//UIThread가 종료될때 저희가만든 해당 쓰레드도종료가.
thread2.Priority = ThreadPriority.Normal;//OS(운영체제)자원을 얼마나 자주사용.
thread2.Start();
}
catch (Exception ex)
{
}
}
/// <summary>
/// thread가 사용할 함수.
/// </summary>
private void WorkThread()
{
while (true)//반복문
{
//1번째로 신호를 받기위해서 기다리는상태.
autoResetEvent.WaitOne();//신호를 받을 때 까지 대기하게됩니다.//생성자에 true 를 주면 첫번쨰신호는 받은상태로변경//두번쨰신호를 대기하는 상태.
//다음작업을 하기를 원하면
MessageBox.Show("" + a);
}
}
private void Work2()
{
//lock (lockObj)
//{
// a = 4;
// Thread.Sleep(5000);
// MessageBox.Show("" + a);
//}
while (true)//반복문
{
a++;
Thread.Sleep(5000);//5초를기다
autoResetEvent.Set();//2번쨰 신호를 보내
}
}
[C#] Thread 해제 및 크로스 Thread 발생 (0) | 2023.07.28 |
---|---|
[C#] 동기/ 비동기 정의 (0) | 2023.07.26 |
C# 날짜 시간 차이 비교 (0) | 2023.06.28 |
Farpoint spead 디자인 요약 (0) | 2022.12.27 |
[.NET] DateTime.Compare(DateTime A , DateTime B) A,B날짜비교 (0) | 2022.11.11 |