(C# : Server) 7. Lock 기초

Posted by : at

Category : Charp-Server


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--;
        }
    }
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links