Test recursive mutex code more

This commit is contained in:
Justine Tunney 2024-09-09 00:18:54 -07:00
parent d50d954a3c
commit 95fee8614d
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
4 changed files with 95 additions and 11 deletions

View file

@ -2,17 +2,33 @@
#define COSMOPOLITAN_LIBC_THREAD_LOCK_H_
COSMOPOLITAN_C_START_
#define MUTEX_DEPTH_MIN 0x00000010ull
#define MUTEX_DEPTH_MAX 0x000003f0ull
//
// ┌depth
// │
// COSMOPOLITAN MUTEXES │ ┌waited
// │ │
// │ │┌locked
// │ ││
// │ ││┌pshared
// owner │ │││
// tid │ │││┌type
// │ │ ││││
// ┌──────────────┴───────────────┐ ┌─┴──┐│││├┐
// 0b0000000000000000000000000000000000000000000000000000000000000000
#define MUTEX_DEPTH_MIN 0x00000020ull
#define MUTEX_DEPTH_MAX 0x000007e0ull
#define MUTEX_TYPE(word) ((word) & 3)
#define MUTEX_PSHARED(word) ((word) & 4)
#define MUTEX_LOCKED(word) ((word) & 8)
#define MUTEX_WAITED(word) ((word) & 16)
#define MUTEX_DEPTH(word) ((word) & MUTEX_DEPTH_MAX)
#define MUTEX_OWNER(word) ((word) >> 32)
#define MUTEX_LOCK(word) (((word) & 7) | 8)
#define MUTEX_UNLOCK(word) ((word) & 7)
#define MUTEX_SET_WAITED(word) ((word) | 16)
#define MUTEX_SET_TYPE(word, type) (((word) & ~3ull) | (type))
#define MUTEX_SET_PSHARED(word, pshared) (((word) & ~4ull) | (pshared))
#define MUTEX_INC_DEPTH(word) ((word) + MUTEX_DEPTH_MIN)

View file

@ -75,6 +75,7 @@ typedef struct pthread_mutex_s {
int32_t _pid;
_PTHREAD_ATOMIC(int32_t) _futex;
};
/* this cleverly overlaps with NSYNC struct Dll *waiters; */
_PTHREAD_ATOMIC(uint64_t) _word;
} pthread_mutex_t;