14 int lock = clod_atomic_load(mutex);
15 while (
lock & LOCKED) {
16 for (
int i = 0; i < 500 &&
lock & LOCKED; i++) {
18 lock = clod_atomic_load(mutex);
21 if (
lock & LOCKED && clod_atomic_cas(mutex, &
lock,
lock + WAITER)) {
22 clod_futex_wait(mutex,
lock + WAITER, FUTEX_TIMEOUT_US);
23 lock = clod_atomic_add(mutex, -WAITER);
27 if (clod_atomic_cas(mutex, &
lock,
lock + 1))