[c++] 뮤텍스를 사용한 교착 상태 탐지 및 회피
사용자 공간 스레드는 때때로 공유된 자원에 대한 액세스를 필요로 합니다. 그러나 이는 교착 상태(Deadlock)의 위험을 초래할 수 있습니다. 뮤텍스(Mutex)는 이러한 상황을 피하기 위한 도구로, 공유 자원을 보호하는 데 사용됩니다.
1. 뮤텍스란 무엇인가?
뮤텍스는 상호 배제(mutual exclusion)를 위한 동기화 기법으로, 단 하나의 스레드만이 특정 시간에 공유 자원에 액세스할 수 있도록 보장합니다. 다른 스레드가 접근하려고 하면 대기해야 합니다.
#include <mutex>
std::mutex mtx;
이러한 뮤텍스를 사용하여 공유 자원을 보호하면 교착 상태를 방지할 수 있습니다.
2. 교착 상태 탐지
교착 상태는 일반적으로 4가지 조건을 만족할 때 발생합니다: 상호 배제, 점유 및 대기, 비선점, 순환 대기. 이러한 조건들을 모니터링하여 교착 상태를 탐지할 수 있습니다.
3. 교착 상태 회피
교착 상태를 회피하기 위해서는 교착 상태가 발생할 수 있는 조건 중 하나 이상을 제거해야 합니다. 이를 위해 다음과 같은 방법을 사용할 수 있습니다:
- 자원 할당 그래프를 이용한 교착 상태 예방
- 시간 제한을 두어 대기 상태를 회피
결론
뮤텍스는 교착 상태를 피하기 위한 중요한 기법 중 하나입니다. 교착 상태의 탐지 및 회피를 위해 뮤텍스를 올바르게 사용하는 것은 안정적인 다중 스레드 프로그래밍을 위해 필수적입니다.
참고문헌:
- https://en.cppreference.com/w/cpp/thread/mutex