1 #include "atomic.h" 2 #include "futex_impl.h" 3 __wait(atomic_int * futex,atomic_int * waiters,int current_value)4void __wait(atomic_int* futex, atomic_int* waiters, int current_value) { 5 int spins = 100; 6 while (spins-- && (!waiters || !atomic_load(waiters))) { 7 if (atomic_load(futex) == current_value) 8 a_spin(); 9 else 10 return; 11 } 12 if (waiters) 13 atomic_fetch_add(waiters, 1); 14 while (atomic_load(futex) == current_value) { 15 _zx_futex_wait(futex, current_value, ZX_HANDLE_INVALID, ZX_TIME_INFINITE); 16 } 17 if (waiters) 18 atomic_fetch_sub(waiters, 1); 19 } 20