snapkitty
compilers
c
python
nasm
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 */