77 DISPENSO_REQUIRES(OnceCallableFunc<F>)
79 schedule(std::forward<F>(f), ForceQueuingTag());
89 DISPENSO_REQUIRES(OnceCallableFunc<F>)
91 auto* waiter = getWaiter();
93 std::thread thread([f = std::move(f), waiter]() {
98 RemoveGuard guard{waiter};
127 struct ThreadWaiter {
130 std::condition_variable cond_;
133 std::lock_guard<std::mutex> lk(mtx_);
138 std::lock_guard<std::mutex> lk(mtx_);
139 assert(count_ > 0 &&
"remove() called without matching add()");
146 std::unique_lock<std::mutex> lk(mtx_);
147 cond_.wait(lk, [
this]() {
return count_ == 0; });
158 DISPENSO_DLL_ACCESS
static ThreadWaiter* getWaiter();