CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
condvar.h
Go to the documentation of this file.
1
50
51#pragma once
52
53#include <cx/cx.h>
54#include "aspin.h"
55#include "futex.h"
56#include "mutex.h"
57
58CX_C_BEGIN
59
64
69typedef struct CondVar {
70 Futex seq;
71 atomic(uint32) lastseq;
72 AdaptiveSpin aspin;
74
75void _cvarInit(_Out_ CondVar* cv, uint32 flags);
76
84#define cvarInit(cv, ...) _cvarInit(cv, opt_flags(__VA_ARGS__))
85
92void cvarDestroy(_Inout_ CondVar* cv);
93
107_Requires_lock_held_(*m) bool cvarWaitTimeout(_Inout_ CondVar* cv, _Inout_ Mutex* m, int64 timeout);
108
116_Requires_lock_held_(*m) _meta_inline bool cvarWait(_Inout_ CondVar* cv, _Inout_ Mutex* m)
117{
118 return cvarWaitTimeout(cv, m, timeForever);
119}
120
127bool cvarSignal(_Inout_ CondVar* cv);
128
135bool cvarBroadcast(_Inout_ CondVar* cv);
136
137CX_C_END
138
140// end of thread_condvar group
CONDVAR_Flags
Condition variable initialization flags.
Definition condvar.h:61
_Requires_lock_held_ m bool cvarWaitTimeout(CondVar *cv, Mutex *m, int64 timeout)
void cvarDestroy(CondVar *cv)
bool cvarBroadcast(CondVar *cv)
bool cvarSignal(CondVar *cv)
_Requires_lock_held_ m bool cvarWait(CondVar *cv, Mutex *m)
Definition condvar.h:116
@ CONDVAR_NoSpin
Disable adaptive spinning, use kernel futex immediately.
Definition condvar.h:62
#define timeForever
Maximum representable time value (approximately year 294,276 CE)
Definition time.h:15
Mutex synchronization primitive.
AdaptiveSpin aspin
Adaptive spin state.
Definition condvar.h:72
Futex seq
Futex used to sequence and wake waiters.
Definition condvar.h:70
atomic(uint32) lastseq
Sequence number observed by the most recent waiter.
Definition mutex.h:60