摘要
等等一下。
宣告
#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_owner 是 ZX_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_value 與 value_ptr 的值相符
ZX_ERR_WRONG_TYPE
new_futex_owner 是有效的帳號代碼,但不是執行緒的控制代碼。
ZX_ERR_BAD_STATE
current_value 與 value_ptr 的值不符。
ZX_ERR_TIMED_OUT
在期限之前未喚醒執行緒。