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