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로 다루는 도구예요.