摘要
寫入 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()
會執行以下四項作業:
atomic_store_explicit(value_ptr, new_value, memory_order_release);
zx_futex_wake(value_ptr, wake_count);
zx_handle_close(close_handle);
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()
敬上
是用於卸離的執行緒
另請參閱
- futex 物體
zx_futex_wake()
zx_handle_close()
zx_thread_exit()
zx_vmar_unmap_handle_close_thread_exit()