#include #include #include int pthread_mutex_lock(pthread_mutex_t *mut) { kern_futex_t expected = 0; while (1) { expected = 0; if (__atomic_compare_exchange_n( &mut->__v, &expected, 1, 0, __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE)) { return 0; } futex_wait(&mut->__v, 1, FUTEX_PRIVATE); } return __set_errno(EAGAIN); }