5#ifdef ROO_THREADS_USE_FREERTOS
9#include "freertos/FreeRTOS.h"
10#include "freertos/task.h"
16static constexpr int kMaxWaitingThreads = 8;
25class condition_variable_classic {
28 condition_variable_classic() noexcept;
30 condition_variable_classic(const condition_variable_classic&) = delete;
31 condition_variable_classic& operator=(const condition_variable_classic&) =
35 void wait(unique_lock<mutex>& lock) noexcept;
38 template <class Predicate>
39 void wait(unique_lock<mutex>& lock, Predicate pred) {
40 while (!pred()) wait(lock);
44 void notify_one() noexcept;
47 void notify_all() noexcept;
50 cv_status wait_until(unique_lock<mutex>& lock, const roo_time::Uptime& when);
53 template <typename Predicate>
54 bool wait_until(unique_lock<mutex>& lock, const roo_time::Uptime& when,
57 if (wait_until(lock, when) == cv_status::timeout)
return p();
62 cv_status wait_for(unique_lock<mutex>& lock,
63 const roo_time::Duration& duration) {
64 return wait_until(lock, internal::CalculateDeadlineFromDuration(duration));
68 template <
typename Predicate>
69 bool wait_for(unique_lock<mutex>& lock,
const roo_time::Duration& duration,
71 return wait_until(lock, internal::CalculateDeadlineFromDuration(duration),
77 counting_semaphore<std::numeric_limits<BaseType_t>::max()> waitlist_;
cv_status
Status returned from timed wait operations.