std::condition_variable_any - cppreference.com

From cppreference.com

The condition_variable_any class is a generalization of

std::condition_variable

. Whereas

std::condition_variable

works only on std::unique_lock<std::mutex>, condition_variable_any can operate on any lock that meets the

BasicLockable

requirements.

See

std::condition_variable

for the description of the semantics of condition variables.

The class std::condition_variable_any is a

StandardLayoutType

. It is not

CopyConstructible

,

MoveConstructible

,

CopyAssignable

, or

MoveAssignable

.

If the lock is std::unique_lock<std::mutex>,

std::condition_variable

may provide better performance.

Member functions

(constructor)

constructs the object
(public member function)

[edit]

(destructor)

destructs the object
(public member function)

[edit]

operator=

[deleted]

not copy-assignable
(public member function)

[edit]

Notification

notify_one

notifies one waiting thread
(public member function)

[edit]

notify_all

notifies all waiting threads
(public member function)

[edit]

Waiting

wait

blocks the current thread until the condition variable is awakened
(public member function)

[edit]

wait_for

blocks the current thread until the condition variable is awakened or after the specified timeout duration
(public member function)

[edit]

wait_until

blocks the current thread until the condition variable is awakened or until specified time point has been reached
(public member function)

[edit]

Notes

std::condition_variable_any can be used with

std::shared_lock

in order to wait on a

std::shared_mutex

in shared ownership mode.

A possible use for std::condition_variable_any with custom

Lockable

types is to provide convenient interruptible waits: the custom lock operation would both lock the associated mutex as expected, and also perform the necessary setup to notify this condition variable when the interrupting signal is received.

[1]

See also

External links

Anthony Williams (2012, 1st ed./ 2019, 2nd ed.), “C++ Concurrency in Action”, 9.2.4 “Interrupting a wait on std::condition_variable_any”.