摘要
先喚醒一個執行緒,在持續建立等候室中,然後將更多等候程序重新排入另一個未來等候佇列。
宣告
#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_ptr 的 requeue_count 執行緒從 value_ptr futex 移至 requeue_ptr futex。
zx_futex_requeue_single_owner
類似於 wake_count 為 1 的 zx_futex_requeue
,但 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 相同
- new_requeue_owner 目前是 value_ptr 或 requeue_ptr 的等候者
ZX_ERR_BAD_HANDLE
new_requeue_owner 不是 ZX_HANDLE_INVALID
,也是無效的控制代碼。
ZX_ERR_WRONG_TYPE
new_requeue_owner 是有效的控制代碼,但不是執行緒的控制代碼。
ZX_ERR_BAD_STATE
current_value與 current_value 的值不相符。