mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-30 00:08:30 +00:00
Test recursive mutex code more
This commit is contained in:
parent
d50d954a3c
commit
95fee8614d
4 changed files with 95 additions and 11 deletions
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue