in dispenso/detail/future_impl.h [199:214]
bool run(int s) {
while (s == kNotStarted) {
if (status_.intrusiveStatus().compare_exchange_weak(s, kRunning, std::memory_order_acq_rel)) {
runFunc();
status_.notify(kReady);
if (taskSetCounter_) {
// If we want TaskSet::wait to imply Future::is_ready(),
// we need to signal that *after* setting the Future status to ready.
taskSetCounter_->fetch_sub(1, std::memory_order_release);
}
tryExecuteThenChain();
return true;
}
}
return false;
}