더북(TheBook)

이제 이것을 이용하여 두 스레드가 그림 1-27의 일을 실제로 하게 만들어 봅시다.

코드 chapter_1\deadlock-example

int a;
CriticalSection a_mutex;
int b;
CriticalSection b_mutex;
 
int main()
{
    // t1 스레드를 시작한다.
    thread t1([]()
    {
        while (1)
        {
            CriticalSectionLock lock(a_mutex);
            a++;
            CriticalSectionLock lock2(b_mutex);
            b++;
            cout << "t1 done.\n";
        }
    });
 
    // t2 스레드를 시작한다.
    thread t2([]()
    {
        while (1)
        {
            CriticalSectionLock lock(b_mutex);
            b++;
            CriticalSectionLock lock2(a_mutex);
            a++;
            cout << "t2 done.\n";
        }
    });
 
    // 스레드들의 일이 끝날 때까지 기다린다.
    // 사실상 무한 반복이므로 끝나지 않는다.
    t1.join();
    t2.join();
 
    return 0;
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.