Thread

姓名

线程 - 可运行 / 计算实体

摘要

TODO

说明

线程对象是表示时间共享 CPU 执行上下文的构造。与特定进程对象关联的实时线程对象,可为 I/O 和计算提供所需的其他对象的内存和句柄。

从始至终

线程是通过调用 zx_thread_create() 创建的,但仅在调用 zx_thread_start()zx_process_start() 时开始执行。两个系统调用都将要执行的初始例程的入口点作为参数。

传递给 zx_process_start() 的线程应该是开始在进程上执行的第一个线程。

线程终止执行:在生成没有处理程序或处理程序决定终止线程的异常后,通过调用 zx_thread_exit() + 通过调用 zx_vmar_unmap_handle_close_thread_exit() + 通过调用 zx_futex_wake_handle_close_thread_exit() + 当父进程终止 + 时,使用线程的句柄调用 zx_task_kill() 来终止执行。

从入口点例程返回不会终止执行。入口点的最后一项操作应该是调用 zx_thread_exit() 或上述 _exit() 变体之一。

关闭线程的最后一个句柄不会终止执行。为了强制终止没有可用的句柄的线程,可使用 zx_object_get_child() 获取线程的句柄。强烈建议不要使用此方法。终止正在执行的线程可能会使进程处于损坏状态。

Fuchsia 原生线程始终处于“分离”状态。也就是说,不需要使用 join() 操作来执行干净终止。不过,内核上的某些运行时(例如 C11 或 POSIX)可能需要联接线程。

信号

线程提供了以下信号: + ZX_THREAD_TERMINATED + ZX_THREAD_SUSPENDED + ZX_THREAD_RUNNING

线程启动时,系统会断言 ZX_THREAD_RUNNING。被暂停时,系统会解除 ZX_THREAD_RUNNING 的断言,并断言 ZX_THREAD_SUSPENDED。当线程恢复时,系统会取消 ZX_THREAD_SUSPENDED 的断言,并断言 ZX_THREAD_RUNNING 的断言。当线程终止时,ZX_THREAD_RUNNINGZX_THREAD_SUSPENDED 都会被取消断言,而 ZX_THREAD_TERMINATED 会被断言。

请注意,这些信号以 OR 关系转换为由 zx_object_wait_*() 函数系列维护的状态,因此您可能会在返回时看到所请求信号的任意组合。

系统调用