objc

sync.h
Go to the documentation of this file.
1 
29 #pragma once
30 #include <stdbool.h>
31 #include <stddef.h>
32 #include <stdint.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
44 #define SYS_MUTEX_CTX_SIZE 64
45 
52 #define SYS_COND_CTX_SIZE 64
53 
60 #define SYS_WAITGROUP_CTX_SIZE 128 // Larger to hold mutex + cond + counter
61 
69 typedef struct {
70  bool init;
71  union {
72  uint8_t
74  uint64_t align;
75  };
76 } sys_mutex_t;
77 
85 typedef struct {
86  bool init;
87  union {
88  uint8_t
90  uint64_t align;
91  };
92 } sys_cond_t;
93 
103 typedef struct {
104  bool init;
105  union {
106  uint8_t ctx[SYS_WAITGROUP_CTX_SIZE];
107  uint64_t align;
109  };
111 
122 
134 bool sys_mutex_lock(sys_mutex_t *mutex);
135 
147 bool sys_mutex_trylock(sys_mutex_t *mutex);
148 
159 bool sys_mutex_unlock(sys_mutex_t *mutex);
160 
169 void sys_mutex_finalize(sys_mutex_t *mutex);
170 
181 
193 bool sys_cond_wait(sys_cond_t *cond, sys_mutex_t *mutex);
194 
206 bool sys_cond_timedwait(sys_cond_t *cond, sys_mutex_t *mutex,
207  uint32_t timeout_ms);
208 
219 bool sys_cond_signal(sys_cond_t *cond);
220 
231 bool sys_cond_broadcast(sys_cond_t *cond);
232 
242 void sys_cond_finalize(sys_cond_t *cond);
243 
254 
265 bool sys_waitgroup_add(sys_waitgroup_t *wg, int delta);
266 
278 
289 
290 #ifdef __cplusplus
291 }
292 #endif
Mutex context structure.
Definition: sync.h:69
#define SYS_COND_CTX_SIZE
Buffer size for platform-specific condition variable context dataAdjust based on platform requirement...
Definition: sync.h:52
bool init
Indicates if the mutex is initialized.
Definition: sync.h:70
void sys_cond_finalize(sys_cond_t *cond)
Finalize and cleanup a condition variable.
#define SYS_WAITGROUP_CTX_SIZE
Buffer size for platform-specific waitgroup context dataAdjust based on platform requirements.
Definition: sync.h:60
bool sys_cond_broadcast(sys_cond_t *cond)
Signal all waiting threads.
Waitgroup context structure.
Definition: sync.h:103
void sys_waitgroup_finalize(sys_waitgroup_t *wg)
Finalize and cleanup a waitgroup - wait for completion then cleanup.
bool init
Indicates if the waitgroup is initialized.
Definition: sync.h:104
void sys_mutex_finalize(sys_mutex_t *mutex)
Finalize and cleanup a mutex.
Condition variable context structure.
Definition: sync.h:85
bool sys_cond_signal(sys_cond_t *cond)
Signal one waiting thread.
sys_mutex_t sys_mutex_init(void)
Initialize a new mutex.
uint64_t align
Force 8-byte alignment.
Definition: sync.h:74
#define SYS_MUTEX_CTX_SIZE
Buffer size for platform-specific mutex context dataAdjust based on platform requirements.
Definition: sync.h:44
sys_waitgroup_t sys_waitgroup_init(void)
Initialize a new waitgroup.
bool init
Indicates if the condition variable is initialized.
Definition: sync.h:86
bool sys_mutex_lock(sys_mutex_t *mutex)
Lock a mutex, by blocking.
bool sys_waitgroup_done(sys_waitgroup_t *wg)
Decrement the waitgroup counter.
sys_cond_t sys_cond_init(void)
Initialize a new condition variable.
bool sys_waitgroup_add(sys_waitgroup_t *wg, int delta)
Add to the waitgroup counter.
bool sys_cond_wait(sys_cond_t *cond, sys_mutex_t *mutex)
Wait on a condition variable.
bool sys_cond_timedwait(sys_cond_t *cond, sys_mutex_t *mutex, uint32_t timeout_ms)
Wait on a condition variable with timeout.
bool sys_mutex_unlock(sys_mutex_t *mutex)
Unlock a mutex.
bool sys_mutex_trylock(sys_mutex_t *mutex)
Try to lock a mutex.
uint64_t align
Force 8-byte alignment.
Definition: sync.h:90