Zircon 线程Thread

定义

thread - 可运行的 / 运算实体

描述

线程对象是一种表示时间共享的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()]获取线程句柄。强烈建议不要使用此方法。杀掉正在执行的线程可能会将进程置于corrupt状态。

Fuchsia原生线程总是分离的。也就是说,不需要*join()*操作去完成干净的终止。但是,内核之上的一些运行时runtimes,例如C11或POSIX可能需要线程是连接的。

系统调用

  • [zx_thread_create()] - 在进程中创建新线程
  • [zx_thread_exit()] - 退出当前线程
  • [zx_thread_read_state()] - 从线程读取注册状态
  • [zx_thread_start()] - 使新线程开始执行
  • [zx_thread_write_state()] - 修改线程的注册状态

  • [zx_task_bind_exception_port()] - 将异常端口附加到任务
  • [zx_task_kill()] - 使任务停止运行

猜你喜欢

转载自blog.csdn.net/sinat_20184565/article/details/93907162