728x90
Moniter, lock중 lock사용 추천
Moniter(잘사용안함)
static int number = 0;
static object _obj = new object();
static void Thread_1()
{
for (int i = 0; i < 100000; i++)
{
try
{
Monitor.Enter(_obj);
number++;
}
finally // 데드락 예방
{
Monitor.Exit(_obj);
}
}
}
static void Thread_2()
{
for (int i = 0; i < 100000; i++)
{
try
{
Monitor.Enter(_obj);
number--;
}
finally // 데드락 예방
{
Monitor.Exit(_obj);
}
}
}
static void Main(string[] args)
{
Task t1 = new Task(Thread_1);
Task t2 = new Task(Thread_2);
t1.Start();
t2.Start();
Task.WaitAll(t1, t2);
Console.WriteLine(number);
}
lock(보편적)
static void Thread_1()
{
for (int i = 0; i < 100000; i++)
{
lock (_obj)
{
number++;
}
}
}
static void Thread_2()
{
for (int i = 0; i < 100000; i++)
{
lock (_obj)
{
number++;
}
}
}
728x90
'VisualStudio > C#' 카테고리의 다른 글
[C#] Web 종류 net6.0기준 (0) | 2022.11.07 |
---|---|
[C#서버][방법] 배치(bat)파일 사용 방법 Main(string[] args) args 인자 값 만들기 (0) | 2022.11.01 |
C#[팁, 방법] Attribute 에트리뷰트 (0) | 2022.10.11 |
C#[방법] 리플랙션(Reflection) Class 속성 출력 방법 (0) | 2022.10.11 |
[C#] 제네릭 형식 제약 조건(Where) (0) | 2022.10.05 |