lock_guard — std::lock_guard

lock_guard — std::lock_guard

std::lock_guard 클래스는 스코프 블록 동안 뮤텍스를 소유하기 위한 편리한 RAII-스타일 메커니즘을 제공하는 뮤텍스 래퍼예요. C++11에서 도입됐어요. <mutex> 헤더에 있어요.

lock_guard 객체가 생성되면 뮤텍스를 소유하려 시도하고, 파괴되면 뮤텍스를 해제해요.

출처: cppreference

본문

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

사용 예 — 자동 락/언락

#include <mutex>
#include <thread>
#include <vector>

std::mutex m;
int counter = 0;

void increment() {
    std::lock_guard<std::mutex> lk(m);   // 생성 시 lock
    ++counter;                            // 보호 영역
    // scope 끝에서 자동 unlock (소멸자)
}

int main() {
    std::vector<std::thread> ts;
    for (int i = 0; i < 10; ++i) ts.emplace_back(increment);
    for (auto& t : ts) t.join();
    // counter == 10
}

특징

  • RAII — 생성 시 잠그고, 소멸 시 잠금 해제. 예외가 발생해도 안전하게 해제돼요.
  • lock_guard는 복사·이동할 수 없어요.
  • 락 해제 시점을 명시적으로 제어하고 싶으면 unique_lock을 써요.
  • lock_guard생성 시 잠그는 것만 지원해요. 지연 잠금·시간 제한은 unique_lock/scoped_lock 참고.
std::mutex m;

// 일반적인 패턴: 최소한의 보호만
std::lock_guard<std::mutex> lk(m);
// ... 짧은 보호 코드

std::lock_guard는 뮤텍스를 "잠그고 자동으로 풀기"의 가장 단순하고 흔한 도구예요. 예외 안전성이 뛰어나서 거의 모든 곳에 쓰여요.

더 알아보기 (Learn more)

cppreference