Make BlockingMutex non-recursive on *nix systems

This commit is contained in:
gingerBill
2021-08-18 20:57:03 +01:00
parent d419d81841
commit aa5c3da414
+10 -6
View File
@@ -48,21 +48,25 @@
ReleaseSRWLockExclusive(&m->srwlock); ReleaseSRWLockExclusive(&m->srwlock);
} }
#else #else
typedef gbMutex BlockingMutex; struct BlockingMutex {
pthread_mutex_t pthread_mutex;
pthread_mutexattr_t pthread_mutexattr;
};
void mutex_init(BlockingMutex *m) { void mutex_init(BlockingMutex *m) {
gb_mutex_init(m); pthread_mutexattr_init(&m->pthread_mutexattr);
pthread_mutex_init(&m->pthread_mutex, &m->pthread_mutexattr);
} }
void mutex_destroy(BlockingMutex *m) { void mutex_destroy(BlockingMutex *m) {
gb_mutex_destroy(m); pthread_mutex_destroy(&m->pthread_mutex);
} }
void mutex_lock(BlockingMutex *m) { void mutex_lock(BlockingMutex *m) {
gb_mutex_lock(m); pthread_mutex_lock(&m->pthread_mutex);
} }
bool mutex_try_lock(BlockingMutex *m) { bool mutex_try_lock(BlockingMutex *m) {
return !!gb_mutex_try_lock(m); return pthread_mutex_trylock(&m->pthread_mutex) == 0;
} }
void mutex_unlock(BlockingMutex *m) { void mutex_unlock(BlockingMutex *m) {
gb_mutex_unlock(m); pthread_mutex_unlock(&m->pthread_mutex);
} }
#endif #endif