25 #include "lwpa_common.h"
26 #include "lwpa_bool.h"
41 #define lwpa_mutex_take(idptr, wait_ms) \
42 (((idptr) && (idptr)->valid) \
43 ? (((wait_ms) == 0) ? TryEnterCriticalSection(&(idptr)->cs) : (EnterCriticalSection(&(idptr)->cs), true)) \
45 #define lwpa_mutex_give(idptr) \
48 if ((idptr) && (idptr)->valid) \
49 LeaveCriticalSection(&(idptr)->cs); \
51 #define lwpa_mutex_destroy(idptr) \
54 if ((idptr) && (idptr)->valid) \
56 DeleteCriticalSection(&(idptr)->cs); \
57 (idptr)->valid = false; \
64 #define lwpa_signal_wait(idptr, wait_ms) \
65 ((idptr) ? (WAIT_OBJECT_0 == \
66 WaitForSingleObject(*(idptr), ((wait_ms) == LWPA_WAIT_FOREVER ? INFINITE : (DWORD)wait_ms))) \
68 #define lwpa_signal_post(idptr) \
72 SetEvent((HANDLE) * (idptr)); \
74 #define lwpa_signal_destroy(idptr) \
78 CloseHandle((HANDLE) * (idptr)); \
90 #define lwpa_rwlock_readunlock(idptr) \
94 InterlockedDecrement(&(idptr)->reader_count); \
97 #define lwpa_rwlock_writeunlock(idptr) \
101 LeaveCriticalSection(&(idptr)->cs); \
103 #define lwpa_rwlock_destroy(idptr) \
106 if ((idptr) && (idptr)->valid) \
107 DeleteCriticalSection(&(idptr)->cs); \
108 (idptr)->valid = false; \
bool lwpa_mutex_create(lwpa_mutex_t *id)
Create a new mutex.
Definition: lwpa_lock.c:26
UNDEFINED lwpa_mutex_t
The mutex identifier.
Definition: lwpa_lock.dox:38
bool lwpa_rwlock_writelock(lwpa_rwlock_t *id, int wait_ms)
Access a read-write lock for writing.
Definition: lwpa_lock.c:127
UNDEFINED lwpa_rwlock_t
The read-write lock identifier.
Definition: lwpa_lock.dox:147
bool lwpa_rwlock_create(lwpa_rwlock_t *id)
Create a new read-write lock.
Definition: lwpa_lock.c:95
bool lwpa_rwlock_readlock(lwpa_rwlock_t *id, int wait_ms)
Access a read-write lock for reading.
Definition: lwpa_lock.c:105
bool lwpa_signal_create(lwpa_signal_t *id)
Create a new signal.
Definition: lwpa_lock.c:56
UNDEFINED lwpa_signal_t
The signal identifier.
Definition: lwpa_lock.dox:83
Definition: lwpa_lock.h:35
Definition: lwpa_lock.h:47