NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
futex.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_ASYNC_FUTEX_HPP__
2#define NEFORCE_CORE_ASYNC_FUTEX_HPP__
3
11
13NEFORCE_BEGIN_NAMESPACE__
14
20
26
33#ifdef NEFORCE_PLATFORM_WINDOWS
34 long;
35#else
36 int;
37#endif
38
39
70
71
82void NEFORCE_API futex_wait(void* addr, platform_wait_t value) noexcept;
83
106bool NEFORCE_API futex_wait_until(void* addr, platform_wait_t value, bool has_timeout, int64_t sec, int64_t ns,
107 bool is_monotonic = false);
108
119void NEFORCE_API futex_notify(void* addr, bool all) noexcept;
120
121#ifdef NEFORCE_PLATFORM_LINUX
122# define NEFORCE_FUTEX_HAS_ADVANCED 1
123
124int futex(void* wait_addr, futex_wait_flags flags, int wake_count, void* requeue_addr, int requeue_count,
125 int cmp_value) noexcept;
126
135int NEFORCE_API futex_requeue(void* wait_addr, int wake_count, void* requeue_addr, int requeue_count) noexcept;
136
148int NEFORCE_API futex_wake_op(void* addr, int wake_count, void* op_addr, int op_arg, int op, int cmp,
149 int cmp_arg) noexcept;
150
151int NEFORCE_API futex_lock_pi(void* addr) noexcept;
152int NEFORCE_API futex_trylock_pi(void* addr) noexcept;
153int NEFORCE_API futex_unlock_pi(void* addr) noexcept;
154
162int NEFORCE_API futex_wait_requeue_pi(void* wait_addr, int value, void* requeue_addr) noexcept;
163
164#endif // NEFORCE_PLATFORM_LINUX
165 // Futex
167 // AsyncComponents
169
170NEFORCE_END_NAMESPACE__
171#endif // NEFORCE_CORE_ASYNC_FUTEX_HPP__
long long int64_t
64位有符号整数类型
int futex_requeue(void *wait_addr, int wake_count, void *requeue_addr, int requeue_count) noexcept
将部分等待线程转移到另一个 futex
void futex_wait(void *addr, platform_wait_t value) noexcept
无限期等待FUTEX
int futex_wake_op(void *addr, int wake_count, void *op_addr, int op_arg, int op, int cmp, int cmp_arg) noexcept
唤醒线程的同时原子修改另一个 futex 的值
long platform_wait_t
平台等待类型别名
int futex_wait_requeue_pi(void *wait_addr, int value, void *requeue_addr) noexcept
等待并转移到 PI futex(用于条件变量与 PI 锁配合)
void futex_notify(void *addr, bool all) noexcept
通知等待的线程
futex_wait_flags
FUTEX操作标志枚举
bool futex_wait_until(void *addr, platform_wait_t value, bool has_timeout, int64_t sec, int64_t ns, bool is_monotonic=false)
等待FUTEX直到指定时间点或条件满足
@ wake_op
唤醒并原子修改另一个FUTEX
@ private_flag
私有标志位
@ bitset_match_any
匹配任何等待集合的位掩码
@ wake
唤醒操作
@ wake_bitset_private
私有位集唤醒操作
@ wait
等待操作
@ wait_bitset_private
私有位集等待操作
@ lock_pi
优先级继承锁(加锁)
@ wait_requeue_pi
等待并转移到PI FUTEX
@ unlock_pi
优先级继承锁(解锁)
@ cmp_requeue
带比较的转移
@ wake_private
私有唤醒操作
@ requeue
将等待队列转移到另一个FUTEX
@ wake_bitset
位集唤醒操作
@ wait_bitset
位集等待操作
@ cmp_requeue_pi
带比较的等待并转移
@ wait_private
私有等待操作
@ trylock_pi
尝试加锁(非阻塞)
类型萃取