데드락이 발생하는 케이스
프로그래밍/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
}
반응형