记录一下以防忘记
glibc-2.23/sysdeps/x86/bits/pthreadtypes.h
typedef union
{
struct
{
int __lock;
unsigned int __nr_readers;
unsigned int __readers_wakeup;
unsigned int __writer_wakeup;
unsigned int __nr_readers_queued;
unsigned int __nr_writers_queued;
int __writer;
int __shared;
signed char __rwelision;
unsigned long int __pad2;
/* FLAGS must stay at this position in the structure to maintain
binary compatibility. */
unsigned int __flags;
# define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1
} __data;
char __size[__SIZEOF_PTHREAD_RWLOCK_T];
long int __align;
} pthread_rwlock_t;
字段含义:
__nr_readers字段表示当前有多少个reader正在使用lock;
__readers_wakeup字段表示需要被唤醒的reader的个数;
__writer_wakeup字段表示需要被唤醒的writer的个数;
__nr_readers_queued字段表示正在排队等待锁的reader个数;
__nr_writers_queued字段表示正在排队等待锁的writer的个数;
__writer字段表示正在使用锁的writer的线程id,用来防止死锁;
列子:
其中__writer字段的比较重要,可以用来查死锁时是在等哪个线程, mutex 锁中对应的字段是__owner
参考:
https://cloud.tencent.com/developer/article/1087263