void lock(futex_t *futex) { int c; while ((c = atomic_inc(&futex->val)) != 0) futex_wait(futex, c+1); } void unlock(futex_t *futex) { futex->val = 0; futex_wake(futex); }