zx_futex_wake_handle_close_thread_exit

摘要

写入 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() 会执行一系列四项操作:

  1. atomic_store_explicit(value_ptr, new_value, memory_order_release);
  2. zx_futex_wake(value_ptr, wake_count);
  3. zx_handle_close(close_handle);
  4. 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() 用于已分离的线程。

另请参阅