File size: 1,125 Bytes
9abace2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #ifndef SOVEREIGN_THREADING_H
#define SOVEREIGN_THREADING_H
#include <windows.h>
#include <stdint.h>
typedef struct SovThread {
HANDLE handle;
DWORD id;
void (*entry)(void *);
void *arg;
} SovThread;
typedef struct SovMutex {
SRWLOCK lock;
} SovMutex;
typedef struct SovCondVar {
CONDITION_VARIABLE cv;
} SovCondVar;
static inline void sov_mutex_init(SovMutex *m) { InitializeSRWLock(&m->lock); }
static inline void sov_mutex_lock(SovMutex *m) { AcquireSRWLockExclusive(&m->lock); }
static inline void sov_mutex_unlock(SovMutex *m) { ReleaseSRWLockExclusive(&m->lock); }
static inline void sov_condvar_init(SovCondVar *cv) { InitializeConditionVariable(&cv->cv); }
static inline void sov_condvar_wait(SovCondVar *cv, SovMutex *m) { SleepConditionVariableSRW(&cv->cv, &m->lock, INFINITE, 0); }
static inline void sov_condvar_signal(SovCondVar *cv) { WakeConditionVariable(&cv->cv); }
static inline void sov_condvar_broadcast(SovCondVar *cv) { WakeAllConditionVariable(&cv->cv); }
#endif /* SOVEREIGN_THREADING_H */
|