姓名
线程 - 可运行 / 计算实体
摘要
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_RUNNING 和 ZX_THREAD_SUSPENDED 都会被取消断言,而 ZX_THREAD_TERMINATED 会被断言。
请注意,这些信号以 OR 关系转换为由 zx_object_wait_*() 函数系列维护的状态,因此您可能会在返回时看到所请求信号的任意组合。
系统调用
zx_thread_create()- 在进程内创建新线程zx_thread_exit()- 退出当前线程zx_thread_read_state()- 从线程中读取寄存器状态zx_thread_start()- 使新线程开始执行zx_thread_write_state()- 修改线程的寄存器状态
zx_task_create_exception_channel()- 监听任务异常zx_task_kill()- 使任务停止运行