[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)을 방지하기 위해 자원 사용 순서를 조정할 수 있습니다.

결론

뮤텍스를 사용하여 공유 자원에 대한 접근을 보호할 때, 자원 사용 순서를 조정함으로써 데드락을 방지할 수 있습니다. 코드를 작성할 때, 자원에 대한 접근 순서를 명확히 정의하여 뮤텍스를 사용하여 안전한 다중 쓰레드 환경을 구축할 수 있습니다.

참고 자료