zx_thread_start

摘要

在執行緒上開始執行作業。

宣告

#include <zircon/syscalls.h>

zx_status_t zx_thread_start(zx_handle_t handle,
                            zx_vaddr_t thread_entry,
                            zx_vaddr_t stack,
                            uintptr_t arg1,
                            uintptr_t arg2);

說明

zx_thread_start() 會使執行緒在程式計數器上開始執行 由 thread_entry 指定,並將堆疊指標設為 stack。 引數 arg1arg2 取至特定架構 會註冊用於函式呼叫的前兩個引數 已開始。其他暫存器開始時即為零。

當執行緒的最後一個控制代碼關閉時,系統就會刪除執行緒。

執行緒帳號代碼可能會等候,並會斷言訊號 執行緒停止執行時的 ZX_THREAD_TERMINATED (因為 zx_thread_exit())。

thread_entry 應指向必須呼叫 zx_thread_exit()zx_futex_wake_handle_close_thread_exit()zx_vmar_unmap_handle_close_thread_exit(),再繼續進行最後一個指示。 範例如下:

void thread_entry(uintptr_t arg1, uintptr_t arg2) __attribute__((noreturn)) {
  // do work here.

  zx_thread_exit();
}

無法在網頁結尾前呼叫其中一個 exit 函式 這項函式會導致架構 / 工具鍊特有的例外狀況。

權限

handle 必須是 ZX_OBJ_TYPE_THREAD 類型,且包含 ZX_RIGHT_MANAGE_THREAD

傳回值

zx_thread_start() 會在成功時傳回 ZX_OK。 如果失敗,系統會傳回負的錯誤值。

錯誤

ZX_ERR_BAD_HANDLE執行緒不是有效的帳號代碼。

ZX_ERR_WRONG_TYPE 執行緒不是執行緒處理常式。

ZX_ERR_ACCESS_DENIED 處理常式執行緒缺少 ZX_RIGHT_WRITE

ZX_ERR_BAD_STATE thread 尚未準備好執行,或程序 Thread 的部分內容已失效。

ZX_ERR_INVALID_ARGS thread_entry 不是使用者空間位址,也不是 或不是 0 標準網址。

另請參閱