摘要
唤醒正在等待 futex 的一个线程,并将更多等待者重新排入另一个 futex 等待队列。
声明
#include <zircon/syscalls.h>
zx_status_t zx_futex_requeue_single_owner(const zx_futex_t* value_ptr,
zx_futex_t current_value,
const zx_futex_t* requeue_ptr,
uint32_t requeue_count,
zx_handle_t new_requeue_owner);
说明
唤醒等待 value_ptr 的一个线程,并将 value_ptr 的所有权分配给 被唤醒的线程如果没有线程在等待 value_ptr,则 value_ptr 的所有权设为“none”。
然后移至仍在等待 value_ptr 的 requeue_count 个线程, 从 value_ptr futex 到 requeue_ptr futex。
zx_futex_requeue_single_owner
类似于 zx_futex_requeue
,但
wake_count 为 1,但 zx_futex_requeue_single_owner
会更改
value_ptr 的所有权。
如需查看完整说明,请参阅 zx_futex_requeue()
。
权限
无。
返回值
如果成功,zx_futex_requeue_single_owner()
会返回 ZX_OK
。
错误
ZX_ERR_INVALID_ARGS
符合以下情况之一:
- value_ptr 或 requeue_ptr 不是有效的用户空间指针
- value_ptr 或 requeue_ptr 未与
sizeof(zx_futex_t)
边界对齐。 - value_ptr 与 requeue_ptr 是相同的 futex
- new_requeue_owner 目前是 value_ptr 或 requeue_ptr 的 Waiter 成员
ZX_ERR_BAD_HANDLE
new_requeue_owner 不是 ZX_HANDLE_INVALID
,也不是有效的句柄。
ZX_ERR_WRONG_TYPE
new_requeue_owner 是一个有效的句柄,但不是线程的句柄。
ZX_ERR_BAD_STATE
current_value 与 value_ptr 中的值不匹配。