di 0.1.0
Loading...
Searching...
No Matches
dumb_condition_variable.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/callable.h"
7
8namespace di::sync {
10public:
12
15
16 void notify_one() {}
17 void notify_all() {}
18
20 DI_ASSERT(lock.owns_lock());
21 lock.unlock();
22 cpu_relax();
23 lock.lock();
24 }
25
26 template<di::concepts::CallableTo<bool> Pred>
27 void wait(UniqueLock<DumbSpinlock>& lock, Pred predicate) {
28 while (!predicate()) {
29 wait(lock);
30 }
31 }
32};
33}
34
35namespace di {
36using sync::DumbConditionVariable;
37}
#define DI_ASSERT(...)
Definition assert_bool.h:7
auto operator=(DumbConditionVariable const &) -> DumbConditionVariable &=delete
DumbConditionVariable(DumbConditionVariable const &)=delete
void notify_all()
Definition dumb_condition_variable.h:17
void wait(UniqueLock< DumbSpinlock > &lock, Pred predicate)
Definition dumb_condition_variable.h:27
void wait(UniqueLock< DumbSpinlock > &lock)
Definition dumb_condition_variable.h:19
void notify_one()
Definition dumb_condition_variable.h:16
Definition unique_lock.h:18
constexpr void lock()
Definition unique_lock.h:45
constexpr void unlock()
Definition unique_lock.h:59
constexpr auto owns_lock() const -> bool
Definition unique_lock.h:79
Definition atomic.h:12
void cpu_relax()
Definition dumb_spinlock.h:8
Definition any_storable.h:9