线程线程启动

摘要

在线程上开始执行。

声明

#include <zircon/syscalls.h>

zx_status_t zx_thread_start(zx_handle_t handle,
                            zx_vaddr_t thread_entry,
                            zx_vaddr_t stack,
                            uintptr_t arg1,
                            uintptr_t arg2);

说明

zx_thread_start() 导致线程开始在程序计数器处执行 (由 thread_entry 指定且堆栈指针设置为 stack)。通过 参数 arg1arg2 按特定架构中的 用于线程之前函数调用的前两个参数的寄存器 。所有其他寄存器在启动时都为零。

当线程的最后一个句柄关闭时,线程会被销毁。

线程句柄可能会等待,并将断言信号 ZX_THREAD_TERMINATED,当线程停止执行(由于 正在调用 zx_thread_exit())。

thread_entry 应指向必须调用 zx_thread_exit()zx_futex_wake_handle_close_thread_exit()zx_vmar_unmap_handle_close_thread_exit()。 示例如下:

void thread_entry(uintptr_t arg1, uintptr_t arg2) __attribute__((noreturn)) {
  // do work here.

  zx_thread_exit();
}

在到达 函数会导致特定于架构 / 工具链的异常。

权限

handle 的类型必须为 ZX_OBJ_TYPE_THREAD 且包含 ZX_RIGHT_MANAGE_THREAD

返回值

如果成功,zx_thread_start() 会返回 ZX_OK。 如果失败,则返回负的错误值。

错误

ZX_ERR_BAD_HANDLE thread 不是有效的句柄。

ZX_ERR_WRONG_TYPE thread 不是线程句柄。

ZX_ERR_ACCESS_DENIED 句柄 thread 缺少 ZX_RIGHT_WRITE

ZX_ERR_BAD_STATE thread 未准备好运行或 thread 进程 的一部分。

ZX_ERR_INVALID_ARGS thread_entry 不是用户空间地址,不是 或者不是 0

另请参阅