shared_lock — std::shared_lock

shared_lock — std::shared_lock

std::shared_lock 클래스는 지연 잠금, 시간 제한 잠금, 잠금 소유권 이전을 허용하는 범용 공유 뮤텍스 소유권 래퍼예요. C++14에서 도입됐어요. <shared_mutex> 헤더에 있어요.

shared_lock을 잠그면 연관된 공유 뮤텍스를 공유(shared) 모드로 잠가요 (배타로 잠그려면 unique_lock 사용).

출처: cppreference

본문

// <shared_mutex> 헤더, C++14
template< class Mutex >
class shared_lock;

사용 예 — 읽기 공유 락

#include <shared_mutex>
#include <mutex>

std::shared_mutex sm;

// 읽기 잠금 (여러 스레드가 동시에 읽을 수 있음)
void read() {
    std::shared_lock<std::shared_mutex> lk(sm);
    // ... 읽기 전용 접근
}

// 쓰기 잠금 (배타)
void write() {
    std::unique_lock<std::shared_mutex> lk(sm);
    // ... 수정 접근
}

즈시/시간 제한 잠금

std::shared_lock<std::shared_mutex> lk1(sm, std::defer_lock);  // 지연
lk1.lock();       // 나중에 잠금

std::shared_lock<std::shared_mutex> lk2(sm, std::try_to_lock); // 시도
if (lk2.owns_lock()) { /* ... */ }

// 시간 제한
if (lk1.try_lock_for(std::chrono::seconds(1))) { /* ... */ }

주요 멤버

멤버 설명
lock() 공유 잠금
try_lock(), try_lock_for(), try_lock_until() 시간 제한/즉시 시도
unlock() 해제
owns_lock() 소유 여부
release() 소유권 포기 (래퍼만 해제)

특징

  • 공유 모드 — 여러 shared_lock이 같은 뮤텍스를 동시에 잠글 수 있어요 (읽기-읽기 허용).
  • 쓰기는 unique_lock으로 배타 접근.
  • std::shared_timed_mutex/std::shared_mutex와 함께 써요.

std::shared_lock읽기가 많고 쓰기가 적은(reader-writer) 동기화 시나리오에서 읽기 쪽 공유 락을 RAII로 다루는 도구예요.

더 알아보기 (Learn more)

cppreference