24 #if FOLLY_HAS_COROUTINES 25 #include <experimental/coroutine> 46 virtual void post() = 0;
87 void wait(F&& mainContextFunc);
104 template <
typename Rep,
typename Period>
119 template <
typename Rep,
typename Period,
typename F>
121 const std::chrono::duration<Rep, Period>&
timeout,
122 F&& mainContextFunc);
132 template <
typename Clock,
typename Duration>
134 const std::chrono::time_point<Clock, Duration>& deadline) {
148 template <
typename Clock,
typename Duration,
typename F>
150 const std::chrono::time_point<Clock, Duration>& deadline,
151 F&& mainContextFunc);
163 template <
typename Clock,
typename Duration,
typename F>
165 const std::chrono::time_point<Clock, Duration>& deadline,
166 F&& mainContextFunc);
169 template <
typename Rep,
typename Period>
170 bool timed_wait(
const std::chrono::duration<Rep, Period>& timeout) {
175 template <
typename Rep,
typename Period,
typename F>
177 const std::chrono::duration<Rep, Period>& timeout,
178 F&& mainContextFunc) {
179 return try_wait_for(timeout, static_cast<F&&>(mainContextFunc));
183 template <
typename Clock,
typename Duration>
184 bool timed_wait(
const std::chrono::time_point<Clock, Duration>& deadline) {
189 template <
typename Clock,
typename Duration,
typename F>
191 const std::chrono::time_point<Clock, Duration>& deadline,
192 F&& mainContextFunc) {
193 return try_wait_until(deadline, static_cast<F&&>(mainContextFunc));
225 void cancelTimeout();
227 std::function<void()> timeoutFunc_{
nullptr};
230 intptr_t timeoutPtr_{0};
261 template <
typename F>
287 #if FOLLY_HAS_COROUTINES 291 explicit BatonAwaitableWaiter(
Baton& baton) : baton_(baton) {}
293 void post()
override {
298 bool await_ready()
const {
299 return baton_.ready();
302 void await_resume() {}
304 void await_suspend(std::experimental::coroutine_handle<>
h) {
307 baton_.setWaiter(*
this);
311 std::experimental::coroutine_handle<> h_;
316 inline detail::BatonAwaitableWaiter
operator co_await(
318 return detail::BatonAwaitableWaiter(baton);
static constexpr intptr_t NO_WAITER
static constexpr intptr_t POSTED
static constexpr intptr_t TIMEOUT
struct folly::fibers::Baton::@51::@53 futex_
constexpr detail::Map< Move > move
Atom< std::uint32_t > Futex
—— Concurrent Priority Queue Implementation ——
requires E e noexcept(noexcept(s.error(std::move(e))))
std::atomic< intptr_t > waiter_
Single-threaded task execution engine.
static constexpr intptr_t THREAD_WAITING
bool timed_wait(const std::chrono::time_point< Clock, Duration > &deadline, F &&mainContextFunc)
Alias to try_wait_until. Deprecated.
bool timed_wait(const std::chrono::time_point< Clock, Duration > &deadline)
Alias to try_wait_until. Deprecated.
bool timedWaitThread(TimeoutController::Duration timeout)
bool timed_wait(const std::chrono::duration< Rep, Period > &timeout, F &&mainContextFunc)
Alias to try_wait_for. Deprecated.
void setWaiter(Waiter &waiter)
folly::detail::Futex futex
~Baton() noexcept=default
bool try_wait_until(const std::chrono::time_point< Clock, Duration > &deadline)
void waitFiber(FiberManager &fm, F &&mainContextFunc)
bool try_wait_for(const std::chrono::duration< Rep, Period > &timeout)
void postHelper(intptr_t new_value)
bool spinWaitForEarlyPost()
bool timed_wait(const std::chrono::duration< Rep, Period > &timeout)
Alias to try_wait_for. Deprecated.