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 會排列在執行緒開始之前,函式呼叫前兩個引數使用的架構專屬登錄中。所有其他暫存器的註冊數一律為 0。

關閉執行緒的最後一個帳號代碼時,該執行緒就會遭到刪除。

執行緒控點可能會等待,並在執行緒停止執行時宣告信號 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();
}

如未在達到函式末端之前呼叫其中一個結束函式,將會導致架構 / 工具鍊的特定例外狀況發生。

權限

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 執行緒 還不能執行,或是程序執行緒已不再運作。

ZX_ERR_INVALID_ARGS thread_entry 不是使用者空間地址、不是 [標準位址] 或 0

另請參閱