1#undef __ae2f_MACRO_GENERATED
2#define __ae2f_MACRO_GENERATED 1
4
5
6#ifndef ae2f_Sys_Futex_auto_h
7#include <ae2f/Sys/Ftx.h>
8#undef __ae2f_MACRO_GENERATED
9#define __ae2f_MACRO_GENERATED 1
10#define ae2f_Sys_Futex_auto_h
12#include <ae2f/Macro.h>
13#undef __ae2f_MACRO_GENERATED
14#define __ae2f_MACRO_GENERATED 1
18#define ae2f_SysFtxLibDefine(key_export)
19#define ae2f_SysFtxLibDeclare(key_extern)
21#define _ae2f_SysFtxWait(
29)\
30{
31 int v_val = (prm_val);
32 (ret_err) = !WaitOnAddress(prm_uaddr, &(v_val), sizeof(int), INFINITE); \
33}
35#define _ae2f_SysFtxWakeOne(
42)\
43{
44 WakeByAddressSingle(ae2f_reinterpret_cast(PVOID, uaddr));
46}
50#define ae2f_SysFtxLibDefine(key_export)
51#define ae2f_SysFtxLibDeclare(key_extern)
53#define _ae2f_SysFtxWait(
61)\
62{
63 (ret_err) = syscall(SYS_futex
, prm_uaddr, FUTEX_WAIT
, prm_val, NULL
, NULL
, 0
); \
64}
66#define _ae2f_SysFtxWake(
74)\
75{
76 (ret_err) = syscall(SYS_futex
, prm_uaddr, FUTEX_WAKE
, prm_numthrd, NULL
, NULL
, 0
); \
77}
79#define _ae2f_SysFtxWakeOne(
86) {
87 _ae2f_SysFtxWake
(ret_err, prm_uaddr, 1
); \
88}
92#define ae2f_SysFtxLibDefine(key_export)
93 key_export pthread_mutex_t __ae2f_gSysFtxMtx = PTHREAD_MUTEX_INITIALIZER; key_export
94 pthread_cond_t __ae2f_gSysFtxCnd = PTHREAD_COND_INITIALIZER;
97#define ae2f_SysFtxLibDeclare(key_extern)
98 key_extern pthread_mutex_t __ae2f_gSysFtxMtx; key_extern
99 pthread_cond_t __ae2f_gSysFtxCnd;
102#if __ae2f_MACRO_GENERATED
105ae2f_SysFtxLibDeclare(
static)
106ae2f_SysFtxLibDefine(
static)
109#define _ae2f_SysFtxWait(
117)\
118{
119 if(pthread_mutex_lock(&__ae2f_gSysFtxMtx))
124 while(*(prm_uaddr) == (v))
126 if(pthread_cond_wait(&__ae2f_gSysFtxCnd, &__ae2f_gSysFtxMtx))
136 if(pthread_mutex_unlock(&__ae2f_gSysFtxMtx))
145}
147#define _ae2f_SysFtxWakeOne(
154)\
155{
156 if(pthread_mutex_lock(&__ae2f_gSysFtxMtx))
161 if(pthread_cond_signal(&(__ae2f_gSysFtxMtx))) {
167 if(pthread_mutex_unlock(&(__ae2f_gSysFtxMtx))) {
175}
181#undef __ae2f_MACRO_GENERATED
183#define __ae2f_MACRO_GENERATED 0
#define _ae2f_SysFtxRet_t
_ae2f_SysFtxRet_t ae2f_SysFtxRet_t
State for futex operation.
_ae2f_SysFtxEl_t ae2f_SysFtxEl_t
Futex address element type.