摘要
喚醒一個執行緒等待 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
相似,但其
1 的 wake_count,但 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 與 value_ptr 的值不符。