recursive_timed_mutex — std::recursive_timed_mutex
recursive_timed_mutex — std::recursive_timed_mutex
std::recursive_timed_mutex 클래스는 여러 스레드가 동시에 공유 데이터에 접근하는 것을 막는 데 사용하는 동기화 기본 요소예요. C++11에서 도입됐어요. <mutex> 헤더에 있어요.
std::recursive_mutex와 유사하게, recursive_timed_mutex는 재귀 소유권과 시간 제한 잠금을 제공해요.
출처: cppreference
본문
// <mutex> 헤더, C++11
class recursive_timed_mutex;
주요 연산
std::recursive_mutex의 연산에 추가로 시간 제한 잠금을 제공해요.
| 연산 | 설명 |
|---|---|
lock() |
잠금 (재귀·블로킹) |
try_lock() |
즉시 시도 |
try_lock_for(dur) |
일정 시간 동안 시도 |
try_lock_until(tp) |
특정 시각까지 시도 |
unlock() |
해제 |
사용 예 — 시간 제한 잠금
#include <mutex>
#include <chrono>
std::recursive_timed_mutex m;
// 최대 1초 동안 잠금 시도
if (m.try_lock_for(std::chrono::seconds(1))) {
// 재귀 잠금도 가능
m.lock(); // 같은 스레드 재잠금
// ...
m.unlock();
m.unlock();
} else {
// 시간 내 획득 실패
}
특징
- 재귀 소유권 — 같은 스레드가 여러 번 잠글 수 있어요.
- 시간 제한 — 일정 시간·시각까지 잠금을 기다리되, 못 얻으면 실패를 반환해요.
- 블로킹 없이 "잠시만 기다려 보고 안 되면 다른 일을" 하는 패턴에 유용해요.
// 특정 시각까지 대기
if (m.try_lock_until(std::chrono::steady_clock::now() + std::chrono::milliseconds(500))) {
// ...
}
recursive_timed_mutex는 재귀 잠금이 필요하면서도 시간 제한으로 불필요한 블로킹을 피하고 싶을 때 사용해요.