static int number = 0
static object _obj = new object();
static void Thread_1()
{
for(int i = 0; i < 100000; i++)
{
Monitor.Enter(_obj); // Mutex Lock과 동일
number++;
Monitor.Exit(_obj); // Unlock
}
}
static void Thread_2()
{
for(int i = 0; i < 100000; i++)
{
Monitor.Enter(_obj);
number--;
// 이런 문제가 발생한다. Exit를 해주지 않은 상태에서
// 누군가 return을 해버린다면 ???
// 무한대기(데드락)이 발생한다
return;
Monitor.Exit(_obj);
}
}
무한대기(데드락) 문제를 해결해보자
static void Thread_2()
{
for(int i = 0; i < 100000; i++)
{
// lock으로 해결가능
lock(_obj)
{
number--;
}
}
}