[c++] C++에서의 뮤텍스 사용

뮤텍스는 여러 스레드가 동시에 공유 자원에 접근하는 것을 제어하기 위한 동기화 기법 중 하나입니다. C++에서는 std::mutex 클래스를 사용하여 뮤텍스를 구현할 수 있습니다.

뮤텍스 선언

먼저, 뮤텍스를 선언하려면 다음과 같이 std::mutex 객체를 정의합니다.

#include <mutex>

std::mutex mtx;

뮤텍스 락

뮤텍스를 사용하여 공유 자원에 대한 잠금을 얻기 위해서는 std::unique_lock 또는 std::lock_guard를 사용합니다. std::unique_lock는 더 많은 유연성을 제공하며 잠금의 스코프를 제어할 수 있습니다.

#include <mutex>

std::mutex mtx;
std::unique_lock<std::mutex> lock(mtx);
// 임계 구역 안의 코드

std::unique_lock를 사용하면 RAII(Resource Acquisition Is Initialization) 원칙을 따라 자동으로 뮤텍스를 잠그고 해제할 수 있습니다.

뮤텍스 해제

뮤텍스를 해제하기 위해서는 std::unique_lock 객체가 스코프를 벗어날 때 자동으로 뮤텍스가 해제됩니다.

{
    std::unique_lock<std::mutex> lock(mtx);
    // 임계 구역 안의 코드
} // 뮤텍스가 자동으로 해제됨

예외 안전성

std::lock_guard 또는 std::unique_lock은 RAII 원칙을 따르므로 예외가 발생해도 자동으로 뮤텍스가 안전하게 해제됩니다.

이제 C++에서 뮤텍스를 사용하여 멀티스레드 환경에서의 안전한 자원 공유를 구현할 수 있습니다.

참고 자료: cppreference.com - std::mutex


이제 C++에서의 뮤텍스 사용에 대한 기본적인 내용을 알아보았습니다. 멀티스레드 환경에서의 자원 접근을 안전하게 제어하기 위해 뮤텍스를 사용하는 방법을 이해했습니다.