5#include "di/assert/assert_bool.h"
6#include "di/meta/callable.h"
7#include "di/sync/unique_lock.h"
21 auto rv = pthread_cond_signal(&m_condition_variable);
26 auto rv = pthread_cond_broadcast(&m_condition_variable);
30 void wait(di::UniqueLock<dius::Mutex>& lock) {
31 DI_ASSERT(lock.owns_lock());
32 auto rv = pthread_cond_wait(&m_condition_variable, lock.mutex()->native_handle());
36 template<di::concepts::CallableTo<
bool> Pred>
37 void wait(di::UniqueLock<dius::Mutex>& lock, Pred predicate) {
38 while (!predicate()) {
43 auto native_handle() -> pthread_cond_t* {
return &m_condition_variable; }
46 pthread_cond_t m_condition_variable;
void notify_one()
Definition condition_variable.h:20
auto native_handle() -> pthread_cond_t *
Definition condition_variable.h:43
~ConditionVariable()
Definition condition_variable.h:16
void notify_all()
Definition condition_variable.h:25
void wait(di::UniqueLock< dius::Mutex > &lock)
Definition condition_variable.h:30
void operator=(ConditionVariable const &)=delete
ConditionVariable(ConditionVariable const &)=delete
ConditionVariable()
Definition condition_variable.h:13
void wait(di::UniqueLock< dius::Mutex > &lock, Pred predicate)
Definition condition_variable.h:37
Definition directory_entry.h:11