zx_futex_wait

摘要

等那隻乳牛。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_futex_wait(const zx_futex_t* value_ptr,
                          zx_futex_t current_value,
                          zx_handle_t new_futex_owner,
                          zx_time_t deadline);

說明

zx_futex_wait() 會以不可分割的形式,驗證 value_ptr 是否仍包含 current_value 值並進入休眠狀態,直到呼叫 zx_futex_wake 可以使用 futex 為止。或者,您也可以視需要在期限 (針對 ZX_CLOCK_MONOTONIC) 結束後喚醒執行緒。期限可能會根據工作的計時器封包政策自動調整。

冒牌水煙

使用 Futexe 的元件應準備處理錯誤的喚醒。錯誤喚醒是指 zx_futex_wait() 成功回傳,即使元件並未透過呼叫 zx_futex_wake() 喚醒等候程序也一樣。

Zircon 的 Futexe 實作程序目前不會產生假造的喚醒本身。但是,使用假定的常用演算法有時可能會產生錯誤的喚醒。例如,一般實作 mutex_unlock 可能會在位置釋放後對記憶體位置產生 zx_futex_wake() 呼叫,並用於不相關的用途。

擁有權

成功呼叫 zx_futex_wait() 會導致 futex 擁有者設為 new_futex_owner 控制代碼參照的執行緒;如果 new_futex_ownerZX_HANDLE_INVALID,則不會傳回任何內容。

詳情請參閱「futex」中的擁有權和優先順序繼承

權限

無。

傳回值

zx_futex_wait() 會在成功時傳回 ZX_OK

錯誤

ZX_ERR_INVALID_ARGS 符合下列其中一項條件:

  • value_ptr 不是有效的使用者空間指標
  • value_ptr 未與 sizeof(zx_futex_t) 邊界對齊。
  • new_futex_owner 目前是 value_ptr 的等候人員。
  • 尚未開始 new_futex_owner

ZX_ERR_BAD_HANDLE new_futex_owner 不是 ZX_HANDLE_INVALID,而是有效的控制代碼,且當前_值value_ptr 的值相符

ZX_ERR_WRONG_TYPE new_futex_owner 是有效的控制代碼,但不是執行緒的控制代碼。

ZX_ERR_BAD_STATE current_valuecurrent_value 的值不相符。

ZX_ERR_TIMED_OUT 執行緒在期限前並未喚醒執行緒。

另請參閱