Wake some number of threads waiting on a futex, optionally transferring ownership to the thread which was woken in the process.
#include <zircon/syscalls.h> zx_status_t zx_futex_wake(const zx_futex_t* value_ptr, uint32_t wake_count);
Waking a futex causes wake_count threads waiting on the value_ptr futex to be woken up.
Waking up zero threads is not an error condition. Passing in an unallocated address for value_ptr is not an error condition.
A successful call to
zx_futex_wake() results in the owner of the futex being set to nothing, regardless of the wake count. In order to transfer ownership of a futex, use the
zx_futex_wake_single_owner() variant instead.
zx_futex_wake_single_owner() will attempt to wake exactly one thread from the futex wait queue. If there is at least one thread to wake, the owner of the futex will be set to the thread which was woken. Otherwise, the futex will have no owner.
See Ownership and Priority Inheritance in futex for details.
zx_futex_wake() returns ZX_OK on success.
ZX_ERR_INVALID_ARGS value_ptr is not aligned.