VisualStudio/C#
[C#서버][개념] 임계영역(크리티컬섹션)상호배제 - Moniter, lock
usingsystem
2022. 10. 26. 14:19
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