[c++] 뮤텍스를 사용한 자원 사용 순서 조정
프로그램에서 여러 쓰레드가 공유 자원에 접근할 때, 뮤텍스(mutex)를 사용하여 자원에 대한 접근을 조정할 수 있습니다. 뮤텍스는 상호배제(mutual exclusion)를 제공하여 여러 쓰레드가 동시에 해당 자원을 사용하지 못하도록 합니다.
불변적인 자원을 보호하는 방법
뮤텍스를 사용하는 가장 일반적인 방법은 생성과 소멸입니다.
#include <mutex>
std::mutex resourceMutex;
void accessResource()
{
resourceMutex.lock(); // 뮤텍스 잠금
// 자원에 대한 안전한 작업 수행
resourceMutex.unlock(); // 뮤텍스 잠금 해제
}
그러나, 여러 개의 자원을 사용할 때, 뮤텍스를 사용하여 자원 사용 순서를 조정할 수 있습니다.
예를 들어, 자원 A, B에 동시에 접근하는 코드가 있다고 가정해보겠습니다.
std::mutex mutexA, mutexB;
void accessResourceA()
{
mutexA.lock();
// 자원 A에 대한 작업 수행
mutexB.lock();
// 자원 B에 대한 작업 수행
mutexB.unlock();
mutexA.unlock();
}
void accessResourceB()
{
mutexB.lock();
// 자원 B에 대한 작업 수행
mutexA.lock();
// 자원 A에 대한 작업 수행
mutexA.unlock();
mutexB.unlock();
}
이렇게 두 개의 자원을 사용할 때, 데드락(deadlock)을 방지하기 위해 자원 사용 순서를 조정할 수 있습니다.
결론
뮤텍스를 사용하여 공유 자원에 대한 접근을 보호할 때, 자원 사용 순서를 조정함으로써 데드락을 방지할 수 있습니다. 코드를 작성할 때, 자원에 대한 접근 순서를 명확히 정의하여 뮤텍스를 사용하여 안전한 다중 쓰레드 환경을 구축할 수 있습니다.