fn futexWake(userdata: ?*anyopaque, ptr: *const u32, max_waiters: u32) void
fn futexWake(userdata: ?*anyopaque, ptr: *const u32, max_waiters: u32) void { const ev: *Evented = @ptrCast(@alignCast(userdata)); if (max_waiters == 0) return; const futex = ev.futexForAddress(@intFromPtr(ptr)); switch (@atomicRmw(usize, &futex.num_waiters, .Add, 0, .release)) { 0 => return, else => { @branchHint(.unlikely); var waker: Futex.Waker = .{ .futex = futex, .ptr = ptr, .max_waiters = max_waiters }; ev.yield(.{ .futex_wake = &waker }); }, } }