20 void* addr, uint64_t
value,
size_t size, uint32_t flags, uint32_t clockid, uint64_t timeout_ns);
45inline int futex_wait(
volatile uint32_t* addr, uint32_t expect)
49 return os_sync_wait_on_address(
50 const_cast<uint32_t*
>(addr),
static_cast<uint64_t
>(expect),
sizeof(uint32_t), OS_SYNC_WAIT_ON_ADDRESS_SHARED);
54 return static_cast<int>(syscall(SYS_futex, addr, FUTEX_WAIT, expect,
nullptr,
nullptr, 0));
74 return os_sync_wait_on_address_with_timeout(
const_cast<uint32_t*
>(addr),
75 static_cast<uint64_t
>(expect),
77 OS_SYNC_WAIT_ON_ADDRESS_SHARED,
78 OS_CLOCK_MACH_ABSOLUTE_TIME,
82 struct timespec timeout = { .tv_sec =
static_cast<time_t
>(timeout_ns / 1000000000ULL),
83 .tv_nsec =
static_cast<long>(timeout_ns % 1000000000ULL) };
85 return static_cast<int>(syscall(SYS_futex, addr, FUTEX_WAIT, expect, &timeout,
nullptr, 0));
103 return os_sync_wake_by_address_any(
const_cast<uint32_t*
>(addr),
sizeof(uint32_t), OS_SYNC_WAKE_BY_ADDRESS_SHARED);
107 return static_cast<int>(syscall(SYS_futex, addr, FUTEX_WAKE, n,
nullptr,
nullptr, 0));