NAME
執行緒 - 可執行 / 運算實體
概要
待辦事項
說明
執行緒物件是代表時間共用 CPU 執行情境的建構項目。執行緒物件與特定 Process 物件相關聯,可為 I/O 和運算作業所需的其他物件提供記憶體和控制代碼。
Lifetime
執行緒是透過呼叫 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_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
和宣告。
請注意,信號會 (或) 進入 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()
:導致工作停止執行