1#ifndef NEFORCE_CORE_ASYNC_FUTEX_HPP__
2#define NEFORCE_CORE_ASYNC_FUTEX_HPP__
13NEFORCE_BEGIN_NAMESPACE__
33#ifdef NEFORCE_PLATFORM_WINDOWS
103 bool is_monotonic =
false);
117#ifdef NEFORCE_PLATFORM_LINUX
118# define NEFORCE_FUTEX_HAS_ADVANCED 1
120int futex(
void* wait_addr,
futex_wait_flags flags,
int wake_count,
void* requeue_addr,
int requeue_count,
121 int cmp_value)
noexcept;
131int NEFORCE_API futex_requeue(
void* wait_addr,
int wake_count,
void* requeue_addr,
int requeue_count)
noexcept;
144int NEFORCE_API futex_wake_op(
void* addr,
int wake_count,
void* op_addr,
int op_arg,
int op,
int cmp,
145 int cmp_arg)
noexcept;
147int NEFORCE_API futex_lock_pi(
void* addr)
noexcept;
148int NEFORCE_API futex_trylock_pi(
void* addr)
noexcept;
149int NEFORCE_API futex_unlock_pi(
void* addr)
noexcept;
158int NEFORCE_API futex_wait_requeue_pi(
void* wait_addr,
int value,
void* requeue_addr)
noexcept;
166NEFORCE_END_NAMESPACE__
long long int64_t
64位有符号整数类型
void NEFORCE_API futex_notify(void *addr, bool all) noexcept
通知等待的线程
void NEFORCE_API futex_wait(void *addr, platform_wait_t value) noexcept
无限期等待FUTEX
bool NEFORCE_API futex_wait_until(void *addr, platform_wait_t value, bool has_timeout, int64_t sec, int64_t ns, bool is_monotonic=false)
等待FUTEX直到指定时间点或条件满足
int platform_wait_t
平台等待类型别名
futex_wait_flags
FUTEX操作标志枚举
@ bitset_match_any
匹配任何等待集合的位掩码
@ wake_bitset_private
私有位集唤醒操作
@ wait_bitset_private
私有位集等待操作
@ wait_requeue_pi
等待并转移到PI FUTEX
@ requeue
将等待队列转移到另一个FUTEX
@ cmp_requeue_pi
带比较的等待并转移