cv_status — std::cv_status
cv_status — std::cv_status
std::cv_status는 시간 제한 대기가 시간 초과 때문에 반환됐는지 여부를 설명하는 스코프 열거형이에요. C++11에서 도입됐어요. <condition_variable> 헤더에 있어요.
std::condition_variable과 std::condition_variable_any의 wait_for, wait_until 멤버가 반환해요.
출처: cppreference
본문
// <condition_variable> 헤더, C++11
enum class cv_status {
no_timeout,
timeout
};
값
| 열거자 | 의미 |
|---|---|
no_timeout |
시간 초과 없이 조건이 충족된 상태 (대기 만족) |
timeout |
시간 초과로 반환됨 |
사용 예
#include <condition_variable>
#include <mutex>
#include <iostream>
std::mutex m;
std::condition_variable cv;
bool ready = false;
// predicate 없는 시간 제한 대기 — 반환 값으로 구분
std::unique_lock<std::mutex> lk(m);
std::cv_status status = cv.wait_for(lk, std::chrono::seconds(1));
if (status == std::cv_status::no_timeout) {
std::cout << "조건 발생 또는 notification\n";
} else {
std::cout << "시간 초과\n";
}
특징
wait_for/wait_until의 반환 값 타입이에요.- predicate 버전의
wait(wait_for(lk, dur, pred))은 시간 초과 여부를 직접 알려주지 않고pred의 결과(bool)를 반환해요. 구분이 필요할 때 predicate 없는 버전의 반환cv_status를 봐요.
// predicate 버전은 bool 반환
bool ready_now = cv.wait_for(lk, std::chrono::seconds(1),
[]{ return ready; });
// ready_now==true → (조건 만족 또는 notification 이후 pred가 참)
std::cv_status는 시간 제한 대기가 왜 끝났는지(시간 초과 vs 조건 충족)를 판별하는 데 사용하는 타입이에요.