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