__wait.c 360 B

123456789101112131415
  1. #include "pthread_impl.h"
  2. void __wait(volatile int *addr, volatile int *waiters, int val, int priv)
  3. {
  4. int spins=10000;
  5. if (priv) priv = 128; priv=0;
  6. while (spins--) {
  7. if (*addr==val) a_spin();
  8. else return;
  9. }
  10. if (waiters) a_inc(waiters);
  11. while (*addr==val)
  12. __syscall(SYS_futex, (long)addr, FUTEX_WAIT|priv, val, 0);
  13. if (waiters) a_dec(waiters);
  14. }