#include "atomic.h" #include "futex_impl.h" void __wait(atomic_int* futex, atomic_int* waiters, int current_value) { int spins = 100; while (spins-- && (!waiters || !atomic_load(waiters))) { if (atomic_load(futex) == current_value) a_spin(); else return; } if (waiters) atomic_fetch_add(waiters, 1); while (atomic_load(futex) == current_value) { _zx_futex_wait(futex, current_value, ZX_TIME_INFINITE); } if (waiters) atomic_fetch_sub(waiters, 1); }