condition_variable_any 类

使用类 condition_variable_any 来等待具有任何 mutex 类型的事件。

语法

class condition_variable_any;

成员

构造函数

名称 描述
condition_variable_any 构造 condition_variable_any 对象。

函数

名称 描述
notify_all 取消阻止正在等待 condition_variable_any 对象的所有线程。
notify_one 取消阻止正在等待 condition_variable_any 对象的某个线程。
wait 阻止线程。
wait_for 阻止某个线程,并设置线程阻止的时间间隔。
wait_until 阻止某个线程,并设置线程阻止的最大时间点。

condition_variable_any

构造 condition_variable_any 对象。

condition_variable_any();

注解

如果没有足够的内存,构造函数将抛出包含 not_enough_memory 错误代码的 system_error 对象。 如果由于某些其他资源不可用导致无法构造该对象,则构造函数将抛出包含 resource_unavailable_try_again 错误代码的 system_error 对象。

notify_all

取消阻止正在等待 condition_variable_any 对象的所有线程。

void notify_all() noexcept;

notify_one

取消阻止正在 condition_variable_any 对象上等待的某个线程。

void notify_one() noexcept;

wait

阻止线程。

template <class Lock>
void wait(Lock& Lck);

template <class Lock, class Predicate>
void wait(Lock& Lck, Predicate Pred);

参数

Lck
任何类型的 mutex 对象。

Pred
返回 truefalse 的任何表达式。

注解

第一种方法进行阻止,直到通过调用 notify_onenotify_allcondition_variable_any 对象发出信号。 它还可错误唤醒。

第二种方法实际上执行以下代码。

while (!Pred())
    wait(Lck);

wait_for

阻止某个线程,并设置线程阻止的时间间隔。

template <class Lock, class Rep, class Period>
bool wait_for(Lock& Lck, const chrono::duration<Rep, Period>& Rel_time);

template <class Lock, class Rep, class Period, class Predicate>
bool wait_for(Lock& Lck, const chrono::duration<Rep, Period>& Rel_time, Predicate Pred);

参数

Lck
任何类型的 mutex 对象。

Rel_time
chrono::duration 对象指定线程唤醒前的时间。

Pred
返回 truefalse 的任何表达式。

返回值

如果在已用 Rel_time 时间时等待终止,则第一种方法返回 cv_status::timeout。 否则,该方法将返回 cv_status::no_timeout

第二种方法返回值 Pred

备注

第一种方法进行阻止,直到通过调用 notify_onenotify_allcondition_variable_any 对象发出信号,或直到已用 Rel_time 时间间隔。 它还可错误唤醒。

第二种方法实际上执行以下代码。

while(!Pred())
    if(wait_for(Lck, Rel_time) == cv_status::timeout)
    return Pred();

return true;

wait_until

阻止某个线程,并设置线程阻止的最大时间点。

template <class Lock, class Clock, class Duration>
void wait_until(Lock& Lck, const chrono::time_point<Clock, Duration>& Abs_time);

template <class Lock, class Clock, class Duration, class Predicate>
void wait_until(
    Lock& Lck,
    const chrono::time_point<Clock, Duration>& Abs_time,
    Predicate Pred);

template <class Lock>
void wait_until(Lock Lck, const xtime* Abs_time);

template <class Lock, class Predicate>
void wait_until(
    Lock Lck,
    const xtime* Abs_time,
    Predicate Pred);

参数

Lck
Mutex 对象。

Abs_time
chrono::time_point 对象。

Pred
返回 truefalse 的任何表达式。

返回值

如果在已用 Abs_time 时间时等待终止,则返回 cv_status 类型的方法返回 cv_status::timeout。 否则,方法返回 cv_status::no_timeout

返回 bool 的方法返回值 Pred

备注

第一种方法进行阻止,直到通过调用 notify_onenotify_allcondition_variable 对象发出信号,或直到 Abs_time。 它还可错误唤醒。

第二种方法实际上执行以下代码。

while(!Pred())
    if(wait_until(Lck, Abs_time) == cv_status::timeout)
    return Pred();

return true;

第三种和第四种方法使用指向 xtime 类型的对象的指针来替换 chrono::time_point 对象。 xtime 对象指定等待信号的最大时间。