摘要
写入 futex、唤醒 futex、关闭句柄、退出。
声明
#include <zircon/syscalls.h>
[[noreturn]] void zx_futex_wake_handle_close_thread_exit(
const zx_futex_t* value_ptr,
uint32_t wake_count,
int32_t new_value,
zx_handle_t close_handle);
说明
zx_futex_wake_handle_close_thread_exit()
会执行一系列四项操作:
atomic_store_explicit(value_ptr, new_value, memory_order_release);
zx_futex_wake(value_ptr, wake_count);
zx_handle_close(close_handle);
zx_thread_exit();
您的预期是,一旦第一个操作完成,
其他线程可能会取消映射或重用包含调用
线程自己的堆栈这对本次调用有效,尽管实际可能是
对于普通的 zx_futex_wake()
或任何其他调用无效。
如果有任何操作失败,线程就会陷入陷阱(就像通过 __builtin_trap();
那样)。
权限
TODO(https://fxbug.dev/42107318)
返回值
zx_futex_wake_handle_close_thread_exit()
不会返回。
错误
无。
备注
它的预期用途是让即将终止的线程向其他线程发出提醒 等待其完成,关闭其自己的线程句柄,然后退出。 线程句柄无法提前关闭,因为关闭最后一个 某个线程的句柄会终止该线程。对 value_ptr 的写入操作不能 因为在写入后的任何时间,加入的线程都可能执行 重用或取消分配此线程的堆栈,这可能会导致调用出现问题 转换为此函数。
此调用用于可联接的线程,而
zx_vmar_unmap_handle_close_thread_exit()
用于已分离的线程。
另请参阅
- futex 对象
zx_futex_wake()
zx_handle_close()
zx_thread_exit()
zx_vmar_unmap_handle_close_thread_exit()