[thread.condvarany.intwait] (original) (raw)

32 Concurrency support library [thread]

32.7 Condition variables [thread.condition]

32.7.5 Class condition_variable_any [thread.condition.condvarany]

32.7.5.3 Interruptible waits [thread.condvarany.intwait]

The following wait functions will be notified when there is a stop request on the passed stop_token.

In that case the functions return immediately, returning false if the predicate evaluates to false.

template<class Lock, class Predicate> bool wait(Lock& lock, stop_token stoken, Predicate pred);

Effects: Registers for the duration of this call *thisto get notified on a stop request on stokenduring this call and then equivalent to:while (!stoken.stop_requested()) { if (pred()) return true; wait(lock);} return pred();

[Note 1:

The returned value indicates whether the predicate evaluated totrue regardless of whether there was a stop request.

— _end note_]

Postconditions: lock is locked by the calling thread.

Throws: Any exception thrown by pred.

Remarks: If the function fails to meet the postcondition,terminate is called ([except.terminate]).

[Note 2:

This can happen if the re-locking of the mutex throws an exception.

— _end note_]

template<class Lock, class Clock, class Duration, class Predicate> bool wait_until(Lock& lock, stop_token stoken,const chrono::time_point<Clock, Duration>& abs_time, Predicate pred);

Effects: Registers for the duration of this call *thisto get notified on a stop request on stokenduring this call and then equivalent to:while (!stoken.stop_requested()) { if (pred()) return true;if (wait_until(lock, abs_time) == cv_status::timeout) return pred();} return pred();

[Note 3:

There is no blocking if pred() is initially true,stoken.stop_requested() was already trueor the timeout has already expired.

— _end note_]

[Note 4:

The returned value indicates whether the predicate evaluated to trueregardless of whether the timeout was triggered or a stop request was made.

— _end note_]

Postconditions: lock is locked by the calling thread.

Remarks: If the function fails to meet the postcondition,terminate is called ([except.terminate]).

[Note 5:

This can happen if the re-locking of the mutex throws an exception.

— _end note_]

template<class Lock, class Rep, class Period, class Predicate> bool wait_for(Lock& lock, stop_token stoken,const chrono::duration<Rep, Period>& rel_time, Predicate pred);

Effects: Equivalent to:return wait_until(lock, std::move(stoken), chrono::steady_clock::now() + rel_time, std::move(pred));