mutex — std::mutex

mutex — std::mutex

std::mutex 클래스는 여러 스레드가 동시에 공유 데이터에 접근하는 것을 막는 데 사용하는 동기화 기본 요소예요. C++11에서 도입됐어요. <mutex> 헤더에 있어요.

mutex전용(exclusive), 비재귀(non-recursive) 소유권 의미론을 제공해요.

출처: cppreference

본문

// <mutex> 헤더, C++11
class mutex;

mutex는 호출 스레드가 성공적으로 lock()을 호출한 순간부터 그 시점까지 뮤텍스를 소유해요.

주요 연산

연산 설명
lock() 잠금 (다른 스레드가 소유 중이면 블로킹)
try_lock() 즉시 시도 (실패 시 false)
unlock() 잠금 해제

사용 예

#include <mutex>
#include <thread>

std::mutex m;
int shared = 0;

void increment() {
    m.lock();      // 잠금
    ++shared;      // 보호된 영역
    m.unlock();    // 해제
}

RAII 권장

직접 lock/unlock을 호출하는 대신 std::lock_guardstd::unique_lock을 쓰는 것이 안전해요 (예외에도 해제 보장).

void increment_safe() {
    std::lock_guard<std::mutex> lk(m);   // 자동 lock/unlock
    ++shared;
}

특징

  • 비재귀 — 이미 소유한 스레드가 다시 lock()하면 **데드락(정의되지 않은 동작)**이 돼요. 재귀가 필요하면 std::recursive_mutex.
  • try_lock() — 블로킹 없이 시도.
  • 소유 스레드만 unlock()할 수 있어요.
std::mutex m;
if (m.try_lock()) {        // 즉시 성공 여부
    // 보호 영역
    m.unlock();
} else {
    // 다른 스레드가 사용 중
}

std::mutex는 가장 기본적인 상호 배제 도구예요. 실제 사용에서는 lock_guard/unique_lock으로 감싸 쓰는 것이 일반적이에요.

더 알아보기 (Learn more)

cppreference