2
3
4#ifndef ae2f_Sys_Futex_auto_h
5#include <ae2f/Sys/Ftx.h>
6#define ae2f_Sys_Futex_auto_h
12#define ae2f_SysFtxLibDefine(key_export)
13#define ae2f_SysFtxLibDeclare(key_extern)
15ae2f_MAC() ae2f_SysFtxWait(
16 ae2f_SysFtxRet_t ret_err,
17 ae2f_SysFtxEl_t*
const prm_uaddr,
21 int v_val = (prm_val);
22 (ret_err) = !WaitOnAddress(prm_uaddr, &(v_val),
sizeof(
int), INFINITE);
25ae2f_MAC() ae2f_SysFtxWakeOne(
26 ae2f_SysFtxRet_t ret_err,
27 ae2f_SysFtxEl_t*
const prm_uaddr
30 WakeByAddressSingle(ae2f_reinterpret_cast(PVOID, uaddr));
36#define ae2f_SysFtxLibDefine(key_export)
37#define ae2f_SysFtxLibDeclare(key_extern)
45 (ret_err) = syscall(SYS_futex, prm_uaddr, FUTEX_WAIT, prm_val, NULL, NULL, 0);
54 (ret_err) = syscall(SYS_futex, prm_uaddr, FUTEX_WAKE, prm_numthrd, NULL, NULL, 0);
58 _ae2f_SysFtxWake(ret_err, prm_uaddr, 1);
63#define ae2f_SysFtxLibDefine(key_export)
64 key_export pthread_mutex_t __ae2f_gSysFtxMtx = PTHREAD_MUTEX_INITIALIZER; key_export
65 pthread_cond_t __ae2f_gSysFtxCnd = PTHREAD_COND_INITIALIZER;
68#define ae2f_SysFtxLibDeclare(key_extern)
69 key_extern pthread_mutex_t __ae2f_gSysFtxMtx; key_extern
70 pthread_cond_t __ae2f_gSysFtxCnd;
73#if __ae2f_MACRO_GENERATED
76ae2f_SysFtxLibDeclare(
static)
77ae2f_SysFtxLibDefine(
static)
80ae2f_MAC() ae2f_SysFtxWait(
81 ae2f_SysFtxRet_t ret_err,
82 ae2f_SysFtxEl_t*
const prm_uaddr,
86 if(pthread_mutex_lock(&__ae2f_gSysFtxMtx))
91 while(*(prm_uaddr) == (v))
93 if(pthread_cond_wait(&__ae2f_gSysFtxCnd, &__ae2f_gSysFtxMtx))
103 if(pthread_mutex_unlock(&__ae2f_gSysFtxMtx))
114ae2f_MAC() ae2f_SysFtxWakeOne(ae2f_SysFtxRet_t ret_err, ae2f_SysFtxEl_t*
const prm_uaddr)
116 if(pthread_mutex_lock(&__ae2f_gSysFtxMtx))
121 if(pthread_cond_signal(&(__ae2f_gSysFtxMtx))) {
127 if(pthread_mutex_unlock(&(__ae2f_gSysFtxMtx))) {
_ae2f_SysFtxRet_t ae2f_SysFtxRet_t
State for futex operation.
_ae2f_SysFtxEl_t ae2f_SysFtxEl_t
Futex address element type.