zx_futex_wake_handle_close_thread_exit

摘要

寫入 Futex、Wake futex、關閉控點、結束。

宣告

#include <zircon/syscalls.h>

[[noreturn]] void zx_futex_wake_handle_close_thread_exit(
    const zx_futex_t* value_ptr,
    uint32_t wake_count,
    int32_t new_value,
    zx_handle_t close_handle);

說明

zx_futex_wake_handle_close_thread_exit() 會執行以下四項作業:

  1. atomic_store_explicit(value_ptr, new_value, memory_order_release);
  2. zx_futex_wake(value_ptr, wake_count);
  3. zx_handle_close(close_handle);
  4. zx_thread_exit();

預期情況就是在第一個作業完成後 其他執行緒可能會取消對應,或重複使用含有呼叫 執行緒本身的堆疊這適用於此呼叫,不過 不適用於一般 zx_futex_wake() 或任何其他呼叫。

如果任何作業失敗,執行緒就會進行追蹤 (就像使用 __builtin_trap();)。

權限

TODO(https://fxbug.dev/42107318)

傳回值

zx_futex_wake_handle_close_thread_exit() 不會傳回。

錯誤

無。

附註

用途是讓停止運作的執行緒在快訊中警告另一個執行緒 等待其完成,關閉其本身的執行緒控制代碼,然後結束。 執行緒帳號代碼無法預先關閉,因為關閉最後一個 執行緒作業就會終止該執行緒。無法寫入 value_ptr 就在這個呼叫前完成,因為寫入執行緒後 重複使用或取消分配這個執行緒的堆疊,但這可能會導致呼叫 轉換為這個函式

這項呼叫用於可彙整的執行緒,而 zx_vmar_unmap_handle_close_thread_exit()敬上 是用於卸離的執行緒

另請參閱