thread - runnable / computation entity
TODO
The thread object is the construct that represents a time-shared CPU execution context. Thread objects live associated to a particular Process Object which provides the memory and the handles to other objects necessary for I/O and computation.
Threads are created by calling zx_thread_create()
, but only start executing
when either zx_thread_start()
or zx_process_start()
are called. Both syscalls
take as an argument the entrypoint of the initial routine to execute.
The thread passed to zx_process_start()
should be the first thread to start execution
on a process.
A thread terminates execution:
- by calling
zx_thread_exit()
- by calling
zx_vmar_unmap_handle_close_thread_exit()
- by calling
zx_futex_wake_handle_close_thread_exit()
- when the parent process terminates
- by calling
zx_task_kill()
with the thread's handle - after generating an exception for which there is no handler or the handler decides to terminate the thread.
Returning from the entrypoint routine does not terminate execution. The last
action of the entrypoint should be to call zx_thread_exit()
or one of the
above mentioned _exit()
variants.
Closing the last handle to a thread does not terminate execution. In order to
forcefully kill a thread for which there is no available handle, use
zx_object_get_child()
to obtain a handle to the thread. This method is strongly
discouraged. Killing a thread that is executing might leave the process in a
corrupt state.
Fuchsia native threads are always detached. That is, there is no join() operation needed to do a clean termination. However, some runtimes above the kernel, such as C11 or POSIX might require threads to be joined.
- thread_create - create a new thread within a process
- thread_exit - exit the current thread
- thread_read_state - read register state from a thread
- thread_start - cause a new thread to start executing
- thread_write_state - modify register state of a thread
- task_resume - cause a suspended task to continue running
- task_bind_exception_port - attach an exception port to a task
- task_kill - cause a task to stop running