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。或者,執行緒也可以在 期限 (關於 ZX_CLOCK_MONOTONIC) 會傳遞。期限可能是 根據工作的計時器滑桿政策自動調整。

特殊喚醒

使用 futexe 的元件應準備好應對 喚醒裝置。「意外醒來」是指zx_futex_wait() 即使元件未喚醒等候程序,仍會成功傳回 呼叫 zx_futex_wake()

Zircon 的 futexes 實作目前不會產生 以及嚴重的喚醒方式。然而 達成 50% 的壓力有時可能會被誤點的喚醒情形。舉例來說, 一般的 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,也不是有效帳號代碼「和」 current_valuevalue_ptr 的值相符

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

ZX_ERR_BAD_STATE current_valuevalue_ptr 的值不符。

ZX_ERR_TIMED_OUT期限之前未喚醒執行緒。

另請參閱