姓名
线程 - 可运行 / 计算实体
摘要
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()
- 使任务停止运行