이제 이것을 이용하여 두 스레드가 그림 1-27의 일을 실제로 하게 만들어 봅시다.
코드 chapter_1\deadlock-example
int a; CriticalSection a_mutex; int b; CriticalSection b_mutex; int main() { // t1 스레드를 시작한다. thread ([]() { while (1) { CriticalSectionLock (a_mutex); a++; CriticalSectionLock (b_mutex); b++; cout << "t1 done.\n"; } }); // t2 스레드를 시작한다. thread ([]() { while (1) { CriticalSectionLock (b_mutex); b++; CriticalSectionLock (a_mutex); a++; cout << "t2 done.\n"; } }); // 스레드들의 일이 끝날 때까지 기다린다. // 사실상 무한 반복이므로 끝나지 않는다. t1.join(); t2.join(); return 0; }