데드락이 발생하는 케이스
프로그래밍/c,c++ 2021. 11. 30. 17:35반응형
단일 스레드 데드락
#include <mutex> std::mutex mutex1; /////////// Lock 이 걸린 상태에서 다시 lock 호출 void deadlock_1() { std::lock_guard<std::mutex> lockGuard(mutex1); deadlock_1_1(); } void deadlock_1_1() { std::lock_guard<std::mutex> lockGuard(mutex1); // 걸려 있는 lock에 대해 다시 lock 시도 } ////////// Lock 이 걸린 상태에서 돌고 돌아 다시 lock 호출, 많이 돌고 돌다 lock 이 걸리면 ... void deadlock_2() { std::lock_guard<std::mutex> lockGuard(mutex1); deadlock_2_1(); } void deadlock_2_1() { deadlock_2(); // 재귀 호출로 다시 lock 시도 }
멀티 스레드 데드락 - 번호 순서로 실행 되면 데드락 발생
#include <mutex> std::mutex mutex1; std::mutex mutex2; void deadlock_3_thread_1() { std::lock_guard<std::mutex> lockGuard(mutex1); // 1 std::lock_guard<std::mutex> lockGuard(mutex2); // 3 } void deadlock_3_thread_2() { std::lock_guard<std::mutex> lockGuard(mutex2); // 2 std::lock_guard<std::mutex> lockGuard(mutex1); // 3 }
반응형