std::condition_variable_any

From cppreference.com
< cpp‎ | thread
 
 
Concurrency support library
Threads
(C++11)
(C++20)
(C++20)
this_thread namespace
(C++11)
(C++11)
(C++11)
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11)(deprecated in C++20)
(C++11)(deprecated in C++20)
Free functions for atomic operations
Free functions for atomic flags
Memory ordering
Mutual exclusion
(C++11)
Generic lock management
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Condition variables
condition_variable_any
(C++11)
(C++11)
Semaphores
Latches and barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
 
 
Defined in header <condition_variable>
class condition_variable_any;
(since C++11)

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

constructs the object
(public member function)
destructs the object
(public member function)
operator=
[deleted]
not copy-assignable
(public member function)
Notification
notifies one waiting thread
(public member function)
notifies all waiting threads
(public member function)
Waiting
blocks the current thread until the condition variable is awakened
(public member function)
blocks the current thread until the condition variable is awakened or after the specified timeout duration
(public member function)
blocks the current thread until the condition variable is awakened or until specified time point has been reached
(public member function)

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

provides a condition variable associated with a std::unique_lock
(class)

External links

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