摘要
在线程上开始执行。
声明
#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)。通过
参数 arg1 和 arg2 按特定架构中的
用于线程之前函数调用的前两个参数的寄存器
。所有其他寄存器在启动时都为零。
当线程的最后一个句柄关闭时,线程会被销毁。
线程句柄可能会等待,并将断言信号
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
。
另请参阅
zx_futex_wake_handle_close_thread_exit()
zx_handle_close()
zx_handle_duplicate()
zx_object_wait_async()
zx_object_wait_many()
zx_object_wait_one()
zx_thread_create()
zx_thread_exit()
zx_vmar_unmap_handle_close_thread_exit()