zx_futex_requeue_single_owner

总结

唤醒一个等待 futex 的线程,并将更多 Waiter 重新排入另一个 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 的所有权将设置为无。

然后,继续向上移动仍在等待 value_ptrrequeue_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 以下情况之一为 true:

  • value_ptrrequeue_ptr 不是有效的用户空间指针
  • value_ptrrequeue_ptr 未与 sizeof(zx_futex_t) 边界对齐。
  • value_ptrrequeue_ptr 是相同的 futex
  • new_requeue_owner 当前是 value_ptrrequeue_ptr 的 Waiter 成员

ZX_ERR_BAD_HANDLE new_requeue_owner 不是 ZX_HANDLE_INVALID,不是有效的句柄。

ZX_ERR_WRONG_TYPE new_requeue_owner 是有效的句柄,但不是线程的句柄。

ZX_ERR_BAD_STATE current_valuevalue_ptr 中的值不匹配。

另请参阅