ae2f_docs
Loading...
Searching...
No Matches
Thrd.core.h
Go to the documentation of this file.
1/**
2 * @file Thrd.core.h
3 * @brief Contains unified types and dependencies.
4 * */
5#ifndef ae2f_Sys_Thrd_core_h
6#define ae2f_Sys_Thrd_core_h
7
8#include <ae2f/Keys.h>
9
10#include "../Sys.h"
11
12#if ae2f_Sys_WIN(!)0
13#include <windows.h>
14#include <time.h>
15
16#define _ae2f_SysThrdRes_t DWORD /* WINAPI */
17#define _ae2f_SysThrdPrm_t /* __drv_aliasesMem */ LPVOID
18#define _ae2f_SysThrdID_t HANDLE
19
20#elif ae2f_Sys__linux(!)0
21
22/**
23 * @macro __ae2f_SysThrdStckTopOper
24 * A macro to make top pointer.
25 * */
26#ifndef __ae2f_SysThrdStckTopOper
27#define __ae2f_SysThrdStckTopOper(prm_ptr, prm_sz) ((prm_ptr) + (prm_sz))
28#endif
29
30#ifndef _GNU_SOURCE
31#define _GNU_SOURCE
32#endif
33
34#include <sys/mman.h>
35#include <sys/syscall.h>
36#include <unistd.h>
37#include <c89atomic.h>
38#include <sched.h>
39#include <linux/sched.h>
40#include <signal.h>
41#include "./Ftx.h"
42#include <ae2f/c90/StdInt.h>
43
44#define _ae2f_SysThrdRes_t int
45#define _ae2f_SysThrdPrm_t void*
46#define _ae2f_SysThrdID_t int
47
48typedef struct
49{
50 int m_ret;
51 /**
52 * if 1, is done.
53 * This member must not be changed by multiple threads
54 * */
55 ae2f_SysFtxEl_t m_done;
56 int_least64_t m_ftxret;
57
58 int (*m_fn)(void*);
59 void* m_arg;
60 size_t m_stcksz;
61} _ae2f_SysThrdRunnerPrm_t;
62
63typedef union
64{
65 void* ae2f_restrict m_void;
66 char* ae2f_restrict m_char;
67 _ae2f_SysThrdRunnerPrm_t* ae2f_restrict m_prm;
68} _ae2f_SysThrdStckPtr_t;
69
70static _ae2f_SysThrdRes_t _ae2f_SysThrdRunner(_ae2f_SysThrdRunnerPrm_t* prm_stck) {
71
72 if(prm_stck) {
73 /** child section */
74 (prm_stck)->m_done = 0;
75 (prm_stck)->m_ret = (prm_stck->m_fn)((prm_stck)->m_arg);
76 (prm_stck)->m_done = 1;
77
79 (prm_stck)->m_ftxret
80 , (&(prm_stck)->m_done)
81 );
82
83 return 0;
84 }
85
86 return -1;
87}
88
89#else
90#include <pthread.h>
91#include <errno.h>
92#include <sched.h>
93
94#define _ae2f_SysThrdRes_t void*
95#define _ae2f_SysThrdPrm_t void*
96#define _ae2f_SysThrdID_t pthread_t
97#endif
98
99#endif
#define ae2f_static_cast(t, v)
static_cast for C++
Definition Cast.h:28
#define ae2f_reinterpret_cast(t, v)
reinterpret_cast for C++
Definition Cast.h:36
@ ae2f_SysFtxWait_GOOD
Succesful.
Definition Ftx.core.h:22
#define _ae2f_SysFtxWait(ret_err, pprm_uaddr, prm_val)
Definition Ftx.h:53
#define _ae2f_SysFtxWakeOne(ret_err, pprm_uaddr)
Definition Ftx.h:58
_ae2f_SysFtxEl_t ae2f_SysFtxEl_t
Futex address element type.
Definition Ftx.h:28
#define unless(a)
Invokes when condition is false.
Definition Keys.h:34
#define __ae2f_MACRO_GENERATED
Definition Macro.h:4
#define ae2f_MAC(a)
A hint for creating a macro from void-returning function.
Definition Macro.h:17
#define ae2f_NIL
Definition Nil.h:13
#define ae2f_Sys_WIN
System does not support this version. <ae2f_SysInetMk::prm_VerReq>.
Definition Sys.h:18
#define ae2f_Sys__linux
Value expected did not match.
Definition Sys.h:15
#define _ae2f_SysThrdJoin_imp(ret_stat, ret_rtn, ref_thrd)
Definition Thrd.auto.h:337
#define _ae2f_SysThrdYield_imp()
Definition Thrd.auto.h:378
#define _ae2f_SysThrdSleep_imp(ret_stat, prm_req, prm_rem)
Definition Thrd.auto.h:365
#define ae2f_Sys_Thrd_auto_h
Definition Thrd.auto.h:25
#define _ae2f_SysThrdMk_imp(ret_stat, ret_thrd, prm_func, prm_arg, prm_stcksz_unused)
Definition Thrd.auto.h:301
#define _ae2f_SysThrdID_t
Definition Thrd.core.h:96
#define _ae2f_SysThrdPrm_t
Definition Thrd.core.h:95
#define _ae2f_SysThrdRes_t
Definition Thrd.core.h:94
ae2f_eSysThrd_t
enum values related to thread. 't follows C11 thread standard.
Definition Thrd.h:33
@ ae2f_eSysThrdTmOut
Definition Thrd.h:41
@ ae2f_eSysThrdMemOut
Definition Thrd.h:38
@ ae2f_eSysThrdSuccess
Definition Thrd.h:35
_ae2f_SysThrdRes_t ae2f_SysThrdRes_t
Return type for thread.
Definition Thrd.h:14
_ae2f_SysThrdPrm_t ae2f_SysThrdPrm_t
Parameters for thread.
Definition Thrd.h:18
ae2f_SysThrdRes_t ae2f_SysThrdFn_t(ae2f_SysThrdPrm_t)
Thread starting function type.
Definition Thrd.h:25
_ae2f_SysThrdID_t ae2f_SysThrdID_t
Thread ID.
Definition Thrd.h:22
#define ae2f_restrict
Keyword as restrict on C99.
Definition cc.h:81
ae2f_SysThrdID_t m_id
Definition Thrd.h:55