cv_status — std::cv_status

cv_status — std::cv_status

std::cv_status시간 제한 대기가 시간 초과 때문에 반환됐는지 여부를 설명하는 스코프 열거형이에요. C++11에서 도입됐어요. <condition_variable> 헤더에 있어요.

std::condition_variablestd::condition_variable_anywait_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 조건 충족)를 판별하는 데 사용하는 타입이에요.

더 알아보기 (Learn more)

cppreference